如何在使用@Cacheable配置的Redis中设置变量到期时间?

时间:2019-12-16 11:26:53

标签: java spring-boot redis jedis

我将Redis配置设置为:

    @Bean
    @Scope("prototype")
    public CacheManager ttlEndOfDayCacheManager(final RedisConnectionFactory redisConnectionFactory) {
        final long timeTillNextDay = DateUtils.timeTillNextDay(Calendar.getInstance());
        log.debug("setting TTL for {}", timeTillNextDay);
        final RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .disableCachingNullValues()
                .entryTtl(Duration.ofMillis(timeTillNextDay))
                .serializeValuesWith(
                        RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json())
                );
        redisCacheConfiguration.usePrefix();
        return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
                .cacheDefaults(redisCacheConfiguration).build();
    }

并将检索设置为:

@Cacheable(value = "performace_rate_card", key = "#deId.toString()", cacheManager = "ttlEndOfDayCacheManager")
    public DeScoreCardResponse getPerformanceRateCardForDe(final long deId, final String tid)

我的用例是我希望密钥在第二天过期。例如,如果当前时间是20:00,则密钥应在第二天的00:00到期。为此,我将CacheManager标记为原型bean。 DateUtils.timeTillNextDay给出了从第二天开始到当前时间的时间差。但是超时没有改变。应用程序启动后即被设置。可以使用这种方法吗?请帮忙。

0 个答案:

没有答案