我正在使用以下内容:
LoadingCache<String, Long> inQueueLoadingCache = CacheBuilder.newBuilder()
.expireAfterWrite(120, TimeUnit.SECONDS)
.removalListener(inQueueRemovalListener)
.build(inQueueCacheLoader);
每隔120秒,将逐出缓存项,并且缓存项将按预期工作。
我的问题是:如何更改当前缓存的超时值,例如从120秒更改为60秒?在此更改期间,缓存条目将如何处理?
最佳答案
简短的答案:您不能更改逐出超时值或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,但是您必须自己实现整个操作(我尝试过一次,但是最终使用了比Guava更高级的缓存)。