我可以为@Cacheable设置一个TTL吗

新手上路,请多包涵

我正在尝试 @Cacheable 对 Spring 3.1 的注释支持,想知道是否有任何方法可以通过设置 TTL 在一段时间后清除缓存数据?现在,据我所知,我需要通过使用 @CacheEvict 并将其与 @Scheduled 一起使用来清除它,我可以自己制作一个 TTL 实现,但它看起来有点这么简单的任务需要多少钱?

原文由 Piotr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

请参阅 http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#cache-specific-config

如何设置 TTL/TTI/Eviction policy/XXX 功能?

直接通过您的缓存提供商。缓存抽象是…好吧,抽象不是缓存实现

所以,如果你使用 EHCache,使用 EHCache 的配置来配置 TTL。

您还可以使用 Guava 的 CacheBuilder 构建缓存,并将此缓存的 ConcurrentMap 视图传递给 ConcurrentMapCacheFactoryBean 的 setStore 方法

原文由 JB Nizet 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题