Springboot|Springboot 注解 @Cacheable自定义单个key设置expire超时时间 并在配置文件里配置
Springboot RedisCacheManager 类的配置 指定key的过期时间 并在配置文件里配置
目的&效果
在springBoot中配置了RedisCache,当使用@Cacheable注解时,默认为redisCache,通过在配置文件里设置不同key的过期时间,达到可自定义key过期时间的效果。
方案
step 1
新建一个Map类,用于存放要设置的key
@ConfigurationProperties
public class Properties {
private final Map initCaches = Maps.newHashMap();
public Map getInitCaches() {
return initCaches;
}
}
step2 在redis配置类里编写cacheManager,并将map set进去
@Autowired
private Properties properties;
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)).disableCachingNullValues();
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
ImmutableSet.Builder cacheNames = ImmutableSet.builder();
ImmutableMap.Builder cacheConfig = ImmutableMap.builder();
for (Map.Entry entry : properties.getInitCaches().entrySet()) {
cacheNames.add(entry.getKey());
cacheConfig.put(entry.getKey(), defaultCacheConfig.entryTtl(entry.getValue()));
}
return RedisCacheManager.builder(redisCacheWriter)
.cacheDefaults(defaultCacheConfig)
.initialCacheNames(cacheNames.build())
.withInitialCacheConfigurations(cacheConfig.build())
.build();
}
step3 在Springboot yml文件里配置相关的key的过期时间 就可以指定@Cacheable的value的过期时间
//伪代码
@Cacheable(cacheNames = "fooboo", key = "#xxx", unless = "#result == null")
public void fooboo(String xxx){}
applicaion.yml文件中设置
initCaches:【Springboot|Springboot 注解 @Cacheable自定义单个key设置expire超时时间 并在配置文件里配置】则在redis缓存中fooboo的值,10分钟过期,fooboo1的值1小时过期
fooboo: 10m
fooboo1: 1h
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 生活与游戏日记(第182篇)(〔成长瞬间〕关注解决问题2019.10)
- springboot使用redis缓存
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤
- springboot中.yml文件的值无法读取的问题及解决