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

Guava Cache如何在TTL到期时自动删除键?

关于Guava Cache TTL到期删除逻辑的说明
  • Guava Cache不实现实时的TTL到期主动删除,它的过期清理依赖两种核心机制:

    1. 惰性删除:当调用get()、getIfPresent()等方法访问键时,会先检查该键是否过期,若过期则直接删除并返回null(或触发加载逻辑)。这块逻辑在LocalCache.Segment的getEntry()方法中,会调用expireEntries()处理过期条目。
    2. 定时后台清理:如果配置了refreshAfterWrite,或通过CacheBuilder.scheduler()指定了调度器,Guava会启动后台线程定期清理过期条目。核心逻辑在LocalCache的maintenance()方法中,后台线程会周期性调用该方法,遍历各segment执行expireEntries()完成批量清理。
  • 找不到“到期立即删除”代码的原因:
    Guava Cache的设计初衷是避免频繁后台扫描带来的性能损耗,它不会为每个键单独设置到期定时器触发删除,而是通过“懒加载时检查+批量定时清理”的组合方式处理过期,因此不存在“某个键一到期就执行删除”的独立代码逻辑。

  • 核心代码查看指引:

    • 惰性删除逻辑:定位到LocalCache.Segment.getEntry(Object key)方法,查看其中对expireEntries()的调用
    • 定时清理逻辑:查看LocalCache.maintenance()方法,以及CacheBuilder中调度器相关配置,后台线程会触发该维护方法执行清理

内容的提问来源于stack exchange,提问作者Qifan.y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:15:59