已解决
Spring 缓存注解
来自网友在路上 182882提问 提问时间:2023-11-11 07:35:55阅读次数: 82
最佳答案 问答题库828位专家为你答疑解惑
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:";@Beanpublic 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);}
}
自定义 MyRedisCacheManager 缓存
其实我们可以通过自定义 MyRedisCacheManager
类继承 Spring Cache
提供的 RedisCacheManager
类后,重写 createRedisCache(String name, RedisCacheConfiguration cacheConfig)
方法来完成自定义缓存有效期的功能,代码如下
public class MyRedisCacheManager extends RedisCacheManager {public MyRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {super(cacheWriter, defaultCacheConfiguration);}@Overrideprotected 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);}
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"Spring 缓存注解":http://eshow365.cn/6-37409-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 回文链表(递归方法)
- 下一篇: linux espeak语音tts;pyttsx3 ubuntu使用