问题描述
基于 this answer,我尝试将自定义 expireAfterWrite
用于“customCache”
所以我的配置是这样的:
@Configuration
@EnableCaching
public class caffeineCacheConfig {
...
@Bean
public caffeineCacheManager cacheManager(caffeine<Object,Object> caffeineCacheBuilder) {
caffeineCacheManager result = new caffeineCacheManager();
result.setcaffeine(caffeineCacheBuilder);
return result;
}
@Bean
public caffeine<Object,Object> caffeineCacheBuilder() {
return caffeine.newBuilder()
.maximumSize(10000)
.expireAfterWrite(60,TimeUnit.SECONDS)
.recordStats();
}
@Bean
public caffeineCache customCache() {
return new caffeineCache("customCache",caffeine.newBuilder()
.maximumSize(10000)
.expireAfterWrite(60,TimeUnit.MINUTES)
.recordStats()
.build());
}
}
然后在代码库中我使用:
“自定义缓存”
Cache cache = cacheManager.getCache("customCache")
String result = cache.get("myKey",() -> "cachedValue")
并且根据我的实验,它在缓存 pn 上保持值仅 60 秒,而我预计 60 分钟。
如何达到预期的效果?
解决方法
我认为更好的方法如下。
@Configuration
@EnableCaching
public class CaffeineCacheConfig
{
@Bean
public CacheManager cacheManager(
@Qualifier("oneMinuteCache") final Cache<Object,Object> oneMinuteCache,@Qualifier("oneHourCache") final Cache<Object,Object> oneHourCache)
{
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(
new CaffeineCache("oneMinuteCache",oneMinuteCache),new CaffeineCache("oneHourCache",oneHourCache)));
return cacheManager;
}
@Bean
public Cache<Object,Object> oneMinuteCache()
{
return Caffeine.newBuilder()
.maximumSize(10000)
.expireAfterWrite(1,TimeUnit.MINUTES)
.recordStats()
.build();
}
@Bean
public Cache<Object,Object> oneHourCache()
{
return Caffeine.newBuilder()
.maximumSize(10000)
.expireAfterWrite(1,TimeUnit.HOURS)
.recordStats()
.build();
}
}