gpt4 book ai didi

java - Guava 如何过期其 CacheBuilder 中的条目?

转载 作者:IT老高 更新时间:2023-10-28 21:14:34 31 4
gpt4 key购买 nike

我想使用这里推荐的 CacheBuilder:

Java time-based map/cache with expiring keys

但是我不明白什么时候 Guava 知道条目会过期。

Guava 是如何做到这一点的,它会产生什么性能成本?

最佳答案

Guava 团队成员在这里。

Guava Cache 实现在正常维护操作过程中使条目过期,这在缓存写入操作期间以每个段为基础发生,偶尔在缓存读取操作期间发生。条目通常不会在恰好它们的过期时间过期,只是因为 Cache 故意决定不创建自己的维护线程,而是让用户决定是否连续需要维护。

我将重点介绍 expireAfterAccess,但 expireAfterWrite 的过程几乎相同。在机制方面,当你在 CacheBuilder 中指定 expireAfterAccess 时,缓存的每个段都会维护一个链表访问队列,用于条目从最近最少访问开始的顺序到最近的访问。缓存条目实际上本身就是链表中的节点,所以当一个条目被访问时,它会从访问队列中的旧位置移除自己,并将自己移动到队列的末尾。

在执行缓存维护时,缓存所要做的就是使队列前面的每个条目过期,直到找到未过期的条目。这很简单并且需要相对较少的开销,并且它发生在正常的缓存维护过程中。 (此外,缓存特意限制了在单次清理中完成的工作量,从而最大限度地减少任何单次缓存操作的费用。)通常,缓存维护的成本主要由计算缓存中的实际条目的费用决定。

关于java - Guava 如何过期其 CacheBuilder 中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144194/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com