我正在尝试 @Cacheable
对 Spring 3.1 的注释支持,想知道是否有任何方法可以通过设置 TTL 在一段时间后清除缓存数据?现在,据我所知,我需要通过使用 @CacheEvict
并将其与 @Scheduled
一起使用来清除它,我可以自己制作一个 TTL 实现,但它看起来有点这么简单的任务需要多少钱?
原文由 Piotr 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试 @Cacheable
对 Spring 3.1 的注释支持,想知道是否有任何方法可以通过设置 TTL 在一段时间后清除缓存数据?现在,据我所知,我需要通过使用 @CacheEvict
并将其与 @Scheduled
一起使用来清除它,我可以自己制作一个 TTL 实现,但它看起来有点这么简单的任务需要多少钱?
原文由 Piotr 发布,翻译遵循 CC BY-SA 4.0 许可协议
弹簧 3.1 和番石榴 1.13.1:
@EnableCaching
@Configuration
public class CacheConfiguration implements CachingConfigurer {
@Override
public CacheManager cacheManager() {
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() {
@Override
protected Cache createConcurrentMapCache(final String name) {
return new ConcurrentMapCache(name,
CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false);
}
};
return cacheManager;
}
@Override
public KeyGenerator keyGenerator() {
return new DefaultKeyGenerator();
}
}
原文由 Magnus Heino 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
请参阅 http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#cache-specific-config :
所以,如果你使用 EHCache,使用 EHCache 的配置来配置 TTL。
您还可以使用 Guava 的 CacheBuilder 构建缓存,并将此缓存的 ConcurrentMap 视图传递给 ConcurrentMapCacheFactoryBean 的 setStore 方法。