package org.hsweb.concureent.cache; import org.hsweb.concureent.cache.monitor.RedisMonitorCache; import org.hsweb.concureent.cache.redis.FastJsonRedisTemplate; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.DefaultRedisCachePrefix; import org.springframework.data.redis.cache.RedisCache; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnection; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import redis.clients.jedis.Jedis; /** * Created by zhouhao on 16-4-26. */ @EnableCaching @Configuration @ConditionalOnClass({JedisConnection.class, RedisOperations.class, Jedis.class}) public class RedisCacheManagerAutoConfig extends CachingConfigurerSupport { @Bean @ConditionalOnMissingBean(FastJsonRedisTemplate.class) public FastJsonRedisTemplate redisTemplate( RedisConnectionFactory redisConnectionFactory) { FastJsonRedisTemplate template = new FastJsonRedisTemplate(redisConnectionFactory); return template; } @Bean public CacheManager cacheManager(FastJsonRedisTemplate redisTemplate) { RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate){ @Override protected RedisCache createCache(String cacheName) { long expiration = computeExpiration(cacheName); return new RedisMonitorCache(cacheName, new DefaultRedisCachePrefix().prefix(cacheName), redisTemplate, expiration); } }; redisCacheManager.setUsePrefix(true); return redisCacheManager; } @Bean public KeyGenerator wiselyKeyGenerator() { return new SimpleKeyGenerator(); } }