You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Guava Cache遍历cache.asMap().values()是否会重置条目访问时间?

Guava Cache遍历asMap().values()是否会重置访问时间?

答案是“否”,完全符合你的期望。

具体细节:

  • Guava Cache通过cache.asMap()返回的是缓存的视图对象,遍历这个视图的values()集合时,只是读取缓存条目的值,不会触发缓存的“访问”逻辑,也就不会更新对应条目的最后访问时间。
  • 只有通过Cache.get()、Cache.put(),或者直接调用asMap().get(key)这类明确的“获取/更新”操作时,才会重置对应条目的访问时间。
  • 这种设计是有意为之的——Guava团队考虑到遍历缓存通常用于监控、统计这类场景,不应该干扰原本的过期策略,避免一次遍历就让所有缓存条目“续命”,打破expireAfterAccess的预期行为。

你可以做个简单测试验证:

  1. 创建一个expireAfterAccess设为10秒的缓存
  2. 放入几个测试条目
  3. 等待5秒后遍历asMap().values()
  4. 再等待6秒后尝试获取这些条目,会发现它们已经过期被清除,这就证明遍历没有重置访问时间。

内容的提问来源于stack exchange,提问作者Brandon E Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:52:01