我在springboot2.0中使用带有redis的@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;
}
但这使得所有密钥ttl 30秒,如何为每个具有不同cachename的redis缓存配置不同的ttl?
2 回答
您可以通过为每个缓存创建不同的配置,仅使用一个CacheManager为每个缓存配置不同的到期时间,并将它们放在用于创建CacheManager的映射中 .
例如:
如果在使用@cacheable时需要为缓存配置不同的过期时间,则可以使用不同的ttl配置不同的CacheManager,并在服务中使用缓存时指定cacheManager .