前提
可以通过以下方法统一过期时间,就是不太实用
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//设置缓存过期时间
RedisCacheConfiguration redisCacheCfg=RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofHours(1))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(STRING_SERIALIZER))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(JACKSON__SERIALIZER));
return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheCfg)
.build();
}
自定义注解实现
1、实现思路:通过spring相关方法拿到所有 自定义的注解,将过期时间设置到对应key里
新建类RedisTimeCacheManager 继承 RedisCacheManager 重写loadCaches()方法
实现 ApplicationContextAware 用于通过 applicationContext 拿到所有 自定义的注解
实现 InitializingBean 用于执行 afterPropertiesSet方法
2、代码如下
/**
* @author xhji
*/
@Slf4j
public class RedisTimeCacheManager extends RedisCacheManager implements ApplicationContextAware, InitializingBean {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
private Map<String, RedisCacheConfiguration> initialCacheConfiguration = new LinkedHashMap<>();
/**
* key serializer
*/
public static final StringRedisSerializer STRING_SE