电子书推送网站怎么做,抚顺网站推广,河南省新闻出版学校咋样,设计网站大全图片Spring Cache 框架给我们提供了 Cacheable 注解用于缓存方法返回内容。但是 Cacheable 注解不能定义缓存有效期。这样的话在一些需要自定义缓存有效期的场景就不太实用。
按照 Spring Cache 框架给我们提供的 RedisCacheManager 实现#xff0c;只能在全局设置缓存有效期。这…Spring Cache 框架给我们提供了 Cacheable 注解用于缓存方法返回内容。但是 Cacheable 注解不能定义缓存有效期。这样的话在一些需要自定义缓存有效期的场景就不太实用。
按照 Spring Cache 框架给我们提供的 RedisCacheManager 实现只能在全局设置缓存有效期。这里给大家看一个常规的 CacheConfig 缓存配置类代码如下
EnableCaching
Configuration
public class CacheConfig extends CachingConfigurerSupport {...private RedisSerializerString keySerializer() {return new StringRedisSerializer();}private RedisSerializerObject 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);}
}