我正在使用以下内容:
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 http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/cache/AbstractLoadingCache.html使用您自己的更改超时策略的骨架实现。但这并不容易,因为你有很好的LoadingCache
的 API,但你必须自己实现整个事情(我尝试过一次,但最终使用了比 Guava 更高级的缓存)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)