我使用以下内容:
LoadingCache<String, Long> inQueueLoadingCache = CacheBuilder.newBuilder()
.expireAfterWrite(120, TimeUnit.SECONDS)
.removalListener(inQueueRemovalListener)
.build(inQueueCacheLoader);
每120秒后,缓存条目被逐出,并按预期工作。
我的问题是:如何更改当前缓存的超时值,例如120到60秒?在此更改期间缓存条目会发生什么?
答案 0 :(得分:3)
简短回答:您无法更改逐出超时值或Cache
创建的LoadingCache
/ CacheBuilder
的任何属性。
无论如何,你为什么要改变超时? (还要记住,Guava缓存非常简单。)如果你确实想要更改超时,你有两个选择:
使用目标语义创建新的Cache
并复制旧的缓存内容,例如。
LoadingCache<String, Long> newCache = CacheBuilder.newBuilder()
.expireAfterWrite(60, TimeUnit.SECONDS)
.removalListener(inQueueRemovalListener)
.build(inQueueCacheLoader);
newCache.putAll(inQueueLoadingCache.asMap());
但您将放宽原始访问时间等。
CacheBuilder
并自己实施LoadingCache
,例如使用AbstractLoadingCache
骨干实施和您自己的更改超时的政策。但这并不容易,因为你有一个很好的LoadingCache
的API,但你必须自己实现整个事情(我试过一次,但结束时使用比番石榴更高级的缓存)一个)。