java中cleanup的使用_java – google guava缓存invalidateAll()和cleanUp()之间的区别

第一部分来自此链接:

How does Guava expire entries in its CacheBuilder?

我将重点关注expireAfterAccess,但expireAfterWrite的过程几乎完全相同.就机制而言,当您在CacheBuilder中指定expireAfterAccess时,缓存的每个段都按照从最近访问到最近访问的顺序维护条目的链表访问队列.高速缓存条目实际上是链接列表中的节点,因此当访问条目时,它将自己从访问队列中的旧位置移除,并将其自身移动到队列的末尾.

invalidate应该立即删除条目 – 不等待另一个查询 – 并且应该强制在下一个查询到该键的时候重新加载该值.

cleanUp:执行缓存所需的任何挂起维护操作.究竟执行哪些活动 – 如果有的话 – 是依赖于实现的.

显式删除

您可以随时明确地使缓存条目无效,而不是等待条目被驱逐.这可以做到:

individually, using Cache.invalidate(key)

in bulk, using Cache.invalidateAll(keys)

to all entries, using Cache.invalidateAll()

什么时候清理会发生?

使用CacheBuilder构建的缓存不会“自动”执行清理和逐出值,或者在值到期后立即执行或逐出任何类型.相反,它在写入操作期间执行少量维护,或者在写入很少的情况下偶尔执行读取操作.

原因如下:如果我们想要连续执行缓存维护,我们需要创建一个线程,其操作将与共享锁的用户操作竞争.此外,某些环境会限制线程的创建,这会使CacheBuilder在该环境中无法使用.

相反,我们把选择放在你手中.如果您的缓存是高吞吐量,那么您不必担心执行缓存维护以清理过期的条目等.如果您的缓存很少写入并且您不希望清除阻止缓存读取,您可能希望创建自己的维护线程,定期调用Cache.cleanUp().

如果要为很少写入的高速缓存安排常规高速缓存维护,只需使用ScheduledExecutorService安排维护.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值