SpringBoot @Cacheable Redis 设置缓存过期时间

1.x 设置  @Bean@Primarypublic CacheManager cacheManager(RedisTemplate redisTemp

1.x 设置 

@Bean
@Primary
public CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);Map expires = new HashMap<>();expires.put("timeout", 60L);// 设置超时
// 根据特定名称设置有效时间redisCacheManager.setExpires(expires);// 设置默认的时间redisCacheManager.setDefaultExpiration(cacheDefaultExpiration);return redisCacheManager;}

使用方式:

转载:传送门


@Configuration
//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600 * 12)//最大过期时间
@EnableCaching
public class RedisConfig {@Beanpublic CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManager rcm = new RedisCacheManager(redisTemplate);//设置缓存过期时间Map expires = new HashMap<>();expires.put("12h", 3600 * 12L);expires.put("1h", 3600 * 1L);expires.put("10m", 60 * 10L);rcm.setExpires(expires);
//        rcm.setDefaultExpiration(60 * 60 * 12);//默认过期时间return rcm;}
}//----------------------------------------------------------@Cacheable(value = "12h", key = "#root.methodName")@Overridepublic List getUserArticleRank() {//获得排行榜前10名的用户,每12小时刷新一次return userRepository.findTop10ByArticleSize();}

2.x 设置

转载:传送门

  /*** 2.XX版本的配置**/@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();  // 生成一个默认配置,通过config对象即可对缓存进行自定义配置config = config.entryTtl(Duration.ofMinutes(2))     // 设置缓存的默认过期时间,也是使用Duration设置.disableCachingNullValues();     // 不缓存空值// 设置一个初始化的缓存空间set集合Set cacheNames = new HashSet<>();cacheNames.add("catalog_test_id");cacheNames.add("catalog_test_name");// 对每个缓存空间应用不同的配置Map configMap = new HashMap<>();configMap.put("catalog_test_id", config);configMap.put("catalog_test_name", config.entryTtl(Duration.ofMinutes(5)));RedisCacheManager cacheManager = RedisCacheManager.builder(factory)     // 使用自定义的缓存配置初始化一个cacheManager.initialCacheNames(cacheNames)  // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置.withInitialCacheConfigurations(configMap).build();return cacheManager;}
@CacheConfig(cacheNames = "catalog_test_name")
public class SsoCache{@Cacheable(keyGenerator = "wiselyKeyGenerator")public String getTokenByGsid(String gsid) 
}-------------------------------------
自定义Redis Cache 自动化配置替换系统默认的cacheManager* 扩展cache name 支持 # 号分隔 cache name 和 超时 ttl(单位秒)。

* 示例:@CachePut(value = "user#300", key = "#id")*

参考:https://gitee.com/brucewuu/spring-ultron/blob/master/spring-ultron-projects/ultron-redis/src/main/java/org/springultron/redis/config/RedisCacheAutoConfiguration.java--------------------------------------------------------- 使用(name中增加“#”,后面是过期时间,不加则走默认时间)@Cacheable(cacheNames = "catalog_test_name#120", unless = "#result==null")public UserEntity findUserByUserName(String userName) {return userRepository.findUserByUserName(userName);}