我正在尝试@CacheableSpring 3.1 的注释支持,并想知道是否有任何方法可以通过设置TTL使缓存数据在一段时间后清除?现在我可以看到我需要通过使用它来清除它@CacheEvict,并且通过使用它@Scheduled我可以自己做一个TTL实现但是对于这么简单的任务似乎有点多了?
我正在春季缓存抽象注释,以将缓存应用于我的服务方法。
由于我将Redis用作缓存存储,因此我想使用在特定时间使缓存过期的选项,因为Redis支持该选项。Redis中的expireat命令可用于设置将来的到期时间。
我不确定使用RedisCache时如何对属于缓存的键进行操作。
我试图通过创建一个bean来定制RedisCacheManager。
我看到有一个暴露的getNativeCache()方法。但是我没有找到任何方法来设置使用它的expireat的值。
如果有一种自定义RedisCacheManager的方法,以便特定缓存的所有键在到期时使用同一时间,请告诉我。
我在带有Redis的springboot2.0中使用@cacheable。我已将RedisCacheManager配置如下:
@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheWriter redisCacheWriter = RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
SerializationPair<Object> valueSerializationPair = RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer());
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
cacheConfiguration = cacheConfiguration.serializeValuesWith(valueSerializationPair);
cacheConfiguration = cacheConfiguration.prefixKeysWith("myPrefix");
cacheConfiguration = cacheConfiguration.entryTtl(Duration.ofSeconds(30));
RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, cacheConfiguration);
return redisCacheManager;
}
Run Code Online (Sandbox Code Playgroud)
但这使所有密钥的ttl变为30秒,如何为每个具有不同缓存名称的redis缓存配置不同的ttl?