我将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
给出了从第二天开始到当前时间的时间差。但是超时没有改变。应用程序启动后即被设置。可以使用这种方法吗?请帮忙。