redis模板无清除缓存

e1xvtsh3  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(425)

缓存仍然在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;
    }
jjjwad0x

jjjwad0x1#

根据javadoc, expireSet 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).

相关问题