Spring Cache缓存注解(2)
Spring
执行此方法后,Redis 中缓存 key 名称如下,
crowd:configCache:getValueByKey_sys.name

TTL 过期时间是 287,跟我们全局设置的 300 秒基本是一致的。此时假如我们想把getValueByKey方法的缓存有效期单独设置为 600 秒,那我们该如何操作嘞?
@Cacheable注解默认是没有提供有关缓存有效期设置的。想要单独修改getValueByKey方法的缓存有效期只能修改全局的缓存有效期。那么有没有别的方法能够为getValueByKey方法单独设置缓存有效期嘞?当然是有的,大家请往下看。
自定义 MyRedisCacheManager 缓存
其实我们可以通过自定义 MyRedisCacheManager 类继承 Spring Cache 提供的 RedisCacheManager 类后,重写 createRedisCache(String name, RedisCacheConfiguration cacheConfig) 方法,代码如下,
public class MyRedisCacheManager extends RedisCacheManager {
public MyRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
super(cacheWriter, defaultCacheConfiguration);
}
@Override
protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
String[] array = StringUtils.split(name, "#");
name = array[0];
// 解析 @Cacheable 注解的 value 属性用以单独设置有效期
if (array.length > 1) {
long ttl = Long.parseLong(array[1]);
cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(ttl));
}
return super.createRedisCache(name, cacheConfig);
}
}
MyRedisCacheManager类逻辑如下,
- 继承
Spring Cache提供的RedisCacheManager类。 - 重写
createRedisCache(String name, RedisCacheConfiguration cacheConfig)方法。 - 解析 name 参数,根据
#字符串进行分割,获取缓存 key 名称以及缓存有效期。
接着我们修改下 CacheConfig 类的 cacheManager 方法用以使用 MyRedisCacheManager 类。代码如下,
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new MyRedisCacheManager(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory), defaultCacheConfig());
}
private RedisCacheConfiguration defaultCacheConfig() {
return RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
.computePrefixWith(name -> CACHE_PREFIX + name + ":")
.entryTtl(Duration.ofSeconds(600));
}
相关阅读
-
深入理解计算机组成原理:从基本结构到运行原理
下面为网友们详细介绍深入理解计算机组成原理方面的知识,接下来就是全面介绍。 计算机组成原理的概述 计算机是我们现代生活中无处不在的设备,它改变了我们的生活方式,工作方式甚至
-
网站制作费用及后期运营方案 网络推广运营技巧
本文摘要:网站制作费用及后期运营方案和网络推广运营技巧的相关经验,接下来一起来看看吧。 网站定制开发 的费用,取决于你想做什么样的网站,需要哪些功能,要解决哪些问题。网站建
-
迅睿怎么调用缩略图 迅睿CMS列表页调用多张缩略图代码教程
我们在 使用迅睿CMS建站的时候,有时候可能需要实现列表页调用多张缩率图的显示效果 ,比如:头条、百度等大型网站就是这样的,那么我们如何实现调用呢?下面IT袋小编就给大家分享调用
-
dropdownlist绑定数据库怎么用 详解dropdownlist控件用法
一篇很详细的教程是关于dropdownlist绑定数据库怎么用和详解dropdownlist控件用法的相关知识,接下来就是全面介绍。 数据绑定最早是被 Angular、Backbone 和 Ember 等框架推广而流行开来的,现在则在


