Spring Cache缓存注解
Spring
今日重点为您介绍Spring方面的知识,一定能解决您的问题的,一起来了解吧!
不念最近在开发公司项目时使用到 Redis 缓存,并在翻看前人代码时,看到了一种关于 @Cacheable 注解的自定义缓存有效期的解决方案,感觉比较实用,因此自己拓展完善了一番后分享给各位。
Spring 缓存常规配置
Spring Cache框架给我们提供了@Cacheable注解用于缓存方法返回内容。但是@Cacheable注解不能定义缓存有效期。这样的话在一些需要自定义缓存有效期的场景就不太实用。
按照 Spring Cache 框架给我们提供的 RedisCacheManager 实现,只能在全局设置缓存有效期。这里给大家看一个常规的 CacheConfig 缓存配置类,代码如下,
@EnableCaching
@Configuration
public class CacheConfig extends CachingConfigurerSupport {
...
private RedisSerializer<String> keySerializer() {
return new StringRedisSerializer();
}
private RedisSerializer<Object> valueSerializer() {
return new GenericFastJsonRedisSerializer();
}
public static final String CACHE_PREFIX = "crowd:";
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 配置序列化(解决乱码的问题)
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
//设置key为String
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
//设置value为自动转Json的Object
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
.computePrefixWith(name -> CACHE_PREFIX + name + ":")
.entryTtl(Duration.ofSeconds(600));
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(Objects.requireNonNull(redisConnectionFactory));
return new RedisCacheManager(redisCacheWriter, config);
}
}
这里面简单对RedisCacheConfiguration缓存配置做一下说明:
serializeKeysWith():设置 Redis 的 key 的序列化规则。erializeValuesWith():设置 Redis 的 value 的序列化规则。computePrefixWith():计算 Redis 的 key 前缀。entryTtl():全局设置@Cacheable注解缓存的有效期。
那么使用如上配置生成的 Redis 缓存 key 名称是什么样得嘞?这里用开源项目 crowd-admin 的 ConfigServiceImpl 类下 getValueByKey(String key) 方法举例,
@Cacheable(value = "configCache", key = "#root.methodName + '_' + #root.args[0]")
@Override
public String getValueByKey(String key) {
QueryWrapper<Config> wrapper = new QueryWrapper<>();
wrapper.eq("configKey", key);
Config config = getOne(wrapper);
if (config == null) {
return null;
}
return config.getConfigValue();
}
相关阅读
-
深入理解计算机组成原理:从基本结构到运行原理
下面为网友们详细介绍深入理解计算机组成原理方面的知识,接下来就是全面介绍。 计算机组成原理的概述 计算机是我们现代生活中无处不在的设备,它改变了我们的生活方式,工作方式甚至
-
网站制作费用及后期运营方案 网络推广运营技巧
本文摘要:网站制作费用及后期运营方案和网络推广运营技巧的相关经验,接下来一起来看看吧。 网站定制开发 的费用,取决于你想做什么样的网站,需要哪些功能,要解决哪些问题。网站建
-
迅睿怎么调用缩略图 迅睿CMS列表页调用多张缩略图代码教程
我们在 使用迅睿CMS建站的时候,有时候可能需要实现列表页调用多张缩率图的显示效果 ,比如:头条、百度等大型网站就是这样的,那么我们如何实现调用呢?下面IT袋小编就给大家分享调用
-
dropdownlist绑定数据库怎么用 详解dropdownlist控件用法
一篇很详细的教程是关于dropdownlist绑定数据库怎么用和详解dropdownlist控件用法的相关知识,接下来就是全面介绍。 数据绑定最早是被 Angular、Backbone 和 Ember 等框架推广而流行开来的,现在则在


