缓存仍然在24秒之后,我试图在每次保存缓存时设置expire,但我希望在配置中是通用的
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = initJackson2JsonRedisSerializer();
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
template.setKeySerializer(stringSerializer);
template.setHashKeySerializer(stringSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setDefaultSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
template.expire(CacheType.EDITORIAL_CACHE.name(), 24, TimeUnit.SECONDS);
template.expire(CacheType.S3_CACHE.name(), 24, TimeUnit.SECONDS);
return template;
}
1条答案
按热度按时间jjjwad0x1#
根据javadoc,
expire
是Set time to live for given key.
. 另外,你的@Bean public RedisTemplate<String, Object> redisTemplate(...)
将在spring应用程序启动时调用,只调用一次。因此,您编写的代码的意思是,“当spring启动时,使该键过期。但我不关心 Spring 开始后的任何事情,“这与您想要做的不同——正如您所提到的“我试图在每个缓存上设置expire”。
如果需要“每次保存缓存时设置过期”,那么在保存时更改命令如何。而不是使用
SET
在redis中,您应该使用SETEX
(见https://redis.io/commands/setex). 例如,Spring的对应物是,void set(K key, V value, long timeout, TimeUnit unit)
(https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/valueoperations.html).