Java Redis模板没有清除缓存

Java Redis模板没有清除缓存,java,spring,spring-boot,redis,Java,Spring,Spring Boot,Redis,缓存仍然在24秒之后,我尝试在每次保存缓存时设置expire,但我希望在配置中是通用的 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>();

缓存仍然在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;
    }
@Bean
公共RedisTemplate RedisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate=新RedisTemplate();
模板.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer Jackson2JsonRedisSerializer=initJackson2JsonRedisSerializer();
RedisSerializer stringSerializer=新的StringRedisSerializer();
setKeySerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setValueSerializer(jackson2JsonRedisSerializer);
setHashValueSerializer(jackson2JsonRedisSerializer);
setDefaultSerializer(jackson2JsonRedisSerializer);
template.afterPropertieSet();
expire(CacheType.EDITORIAL_CACHE.name(),24,TimeUnit.SECONDS);
expire(CacheType.S3_CACHE.name(),24,TimeUnit.SECONDS);
返回模板;
}

根据javadoc,
过期
为给定密钥设置生存时间。
。此外,当Spring应用程序启动时,您的
@Bean public RedisTemplate RedisTemplate(…)
只会被调用一次

因此,您编写的代码的意思是,“当spring启动时,使该密钥过期。但我不关心spring启动后的任何事情。”这与您想要做的不同,正如您所提到的“我尝试在每个缓存上设置expire”


如果需要“每次保存缓存时设置过期”,那么在保存时更改命令如何。不要在redis中使用
SET
,而应该使用
SETEX
(请参阅)。例如,Spring中的对应项是
void set(K键、V值、长超时、时间单位)
()。

您确定您的缓存名称是correct@ch271828n是的,我确定,我正在使用枚举key@yalispring数据redis或redis本身没有默认值。但是,您可以将您的redistemplate包装到您想要的内容中。例如,您可以让对redis的每次调用都使用您的
MyRedisTemplate
,并在其中编写一些设置超时逻辑的命令。@yali当您调用
expire
方法时,您将其设置为24小时后过期。还有其他方法。例如,如果希望它在午夜过期,可以使用expire方法的另一个重载。对于更细粒度的控制,您可以首先获取当前TTL,然后执行任何您喜欢的操作。@yali它被称为
expireAt
,请参阅和@yali you are welcome!:)