一尘不染

可以为@Cacheable设置TTL吗

spring

我正在尝试@Cacheable对Spring 3.1 的注释支持,并且想知道是否有任何方法可以通过设置TTL在一段时间后清除缓存的数据?现在,从我看到的内容中,我需要使用@CacheEvict和自己清除它,并与@Scheduled我一起使用可以实现TTL实现,但是对于这样一个简单的任务来说似乎有点多了吗?


阅读 762

收藏
2020-04-12

共2个答案

一尘不染

如何设置TTL / TTI /驱逐策略/ XXX功能?

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

因此,如果你使用EHCache,请使用EHCache的配置来配置TTL。

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

2020-04-12
一尘不染

Spring 3.1和Guava 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();
    }

}
2020-04-12