Guava 如何使 CacheBuilder 中的条目过期?
2022-09-01 13:58:59
番石榴团队成员在这里。
Guava 实现在正常维护操作过程中使条目过期,这些操作在缓存写入操作期间按分段发生,偶尔在缓存读取操作期间发生。条目通常不会在到期时过期,只是因为故意决定不创建自己的维护线程,而是让用户决定是否需要持续维护。Cache
Cache
我将重点介绍 ,但 的过程几乎相同。就机制而言,当您在 中指定时,缓存的每个段都维护一个条目的链接列表访问队列,其顺序从最近访问到最近访问。缓存条目实际上是链表中的节点,因此当访问条目时,它会从访问队列中的旧位置删除自身,并将自身移动到队列的末尾。expireAfterAccess
expireAfterWrite
expireAfterAccess
CacheBuilder
执行缓存维护时,缓存所要做的就是使队列前面的每个条目过期,直到找到未过期的条目。这很简单,需要的开销相对较小,并且发生在正常的缓存维护过程中。(此外,缓存特意限制了在单个清理中完成的工作量,从而最大限度地减少了任何单个缓存操作的费用。通常,缓存维护的成本主要由计算缓存中实际条目的费用主导。