生产使用:
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
application:
spring.cache.type=REDIS spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port=6379 #spring.redis.password=root #springboot2.x need unit ,db connect time out spring.redis.timeout=60s spring.redis.jedis.pool.max-active=-1 spring.redis.jedis.pool.max-wait=-1s spring.redis.jedis.pool.max-idle=300 spring.redis.jedis.pool.min-idle=5
config: (个人比较推荐的配置)
package com.icil.elsa.subscribe.milestone.common.config; import java.time.Duration; import java.util.HashMap; import java.util.Map; 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.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; /*** * ************************************************************************* * <PRE> * @ClassName: : RedisConfig * * @Description: : 使用 redis 做默认缓存 * * @Creation Date : 25 Feb 2019 3:54:19 PM * * @Author : Sea * * </PRE> ************************************************************************** */ @SuppressWarnings("all") @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean public KeyGenerator simpleKeyGenerator() { return (o, method, objects) -> { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(o.getClass().getSimpleName()); stringBuilder.append("."); stringBuilder.append(method.getName()); stringBuilder.append("["); for (Object obj : objects) { stringBuilder.append(obj.toString()); } stringBuilder.append("]"); return stringBuilder.toString(); }; } @Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { return new RedisCacheManager( RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory), this.getRedisCacheConfigurationWithTtl(5), // 默认策略,未配置的 key 会使用这个 this.getRedisCacheConfigurationMap() // 指定 key 策略 ); } /** * @how to use eg: @Cacheable(value = "MIN10", keyGenerator = "simpleKeyGenerator") //10min @Cacheable(value = "MIN30", keyGenerator = "simpleKeyGenerator") // 30min @Cacheable(value = "MIN60", keyGenerator = "simpleKeyGenerator") // 60min,未指定的key,使用默认策略 ****/ private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() { Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>(); redisCacheConfigurationMap.put("MIN10", this.getRedisCacheConfigurationWithTtl(10)); redisCacheConfigurationMap.put("MIN30", this.getRedisCacheConfigurationWithTtl(30)); redisCacheConfigurationMap.put("MIN60", this.getRedisCacheConfigurationWithTtl(60)); return redisCacheConfigurationMap; } /** * @param Minute * @return */ private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer Minute) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig(); redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith( RedisSerializationContext .SerializationPair .fromSerializer(jackson2JsonRedisSerializer) ).entryTtl(Duration.ofMinutes(Minute)); return redisCacheConfiguration; } }
使用:
@Cacheable(value = "MIN30", keyGenerator = "simpleKeyGenerator") // 30min public Map<String, String> getCountry3CodeAndNameMap() { log.info("^^^^^enter into the CountryAndLocationCacheHandler class-->getCountryCodeAndNameMap method ^^^^^^"); ....return country3CodeAndNameMap; }