java – google guava缓存invalidateAll()和cleanUp()之间的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – google guava缓存invalidateAll()和cleanUp()之间的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2015字,纯文字阅读大概需要3分钟。
内容图文
假设我有一个像这样定义的Cache:
private static Cache<String, Long> alertsUIDCache = CacheBuilder.newBuilder().
expireAfterAccess(60).build();
从我读到的内容(如果我错了请纠正我):
如果在0:00将值写入Cache,则应在60秒后将其移至“准备被驱逐”状态.实际从Cache中删除值将在下一次缓存修改时发生(缓存修改究竟是什么?).是对的吗?
另外,我不确定invalidateAll()和cleanUp()方法之间有什么区别,有人可以提供解释吗?
解决方法:
第一部分来自此链接:How does Guava expire entries in its CacheBuilder?
我将重点关注expireAfterAccess,但expireAfterWrite的过程几乎完全相同.就机制而言,当您在CacheBuilder中指定expireAfterAccess时,缓存的每个段都按照从最近访问到最近访问的顺序维护条目的链表访问队列.高速缓存条目实际上是链接列表中的节点,因此当访问条目时,它将自己从访问队列中的旧位置移除,并将其自身移动到队列的末尾.
invalidate应该立即删除条目 – 不等待另一个查询 – 并且应该强制在下一个查询到该键的时候重新加载该值.
cleanUp:执行缓存所需的任何挂起维护操作.究竟执行哪些活动 – 如果有的话 – 是依赖于实现的.
来自番石榴文件:https://github.com/google/guava/wiki/CachesExplained
显式删除
您可以随时明确地使缓存条目无效,而不是等待条目被驱逐.这可以做到:
individually, using Cache.invalidate(key)
in bulk, using Cache.invalidateAll(keys)
to all entries, using Cache.invalidateAll()
什么时候清理会发生?
使用CacheBuilder构建的缓存不会“自动”执行清理和逐出值,或者在值到期后立即执行或逐出任何类型.相反,它在写入操作期间执行少量维护,或者在写入很少的情况下偶尔执行读取操作.
原因如下:如果我们想要连续执行缓存维护,我们需要创建一个线程,其操作将与共享锁的用户操作竞争.此外,某些环境会限制线程的创建,这会使CacheBuilder在该环境中无法使用.
相反,我们把选择放在你手中.如果您的缓存是高吞吐量,那么您不必担心执行缓存维护以清理过期的条目等.如果您的缓存很少写入并且您不希望清除阻止缓存读取,您可能希望创建自己的维护线程,定期调用Cache.cleanUp().
如果要为很少写入的高速缓存安排常规高速缓存维护,只需使用ScheduledExecutorService安排维护.
内容总结
以上是互联网集市为您收集整理的java – google guava缓存invalidateAll()和cleanUp()之间的区别全部内容,希望文章能够帮你解决java – google guava缓存invalidateAll()和cleanUp()之间的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。