caffeine里expireAfterWrite过期时间是不是依靠懒判断机制实现的

caffeine里expireAfterWrite过期时间是不是依靠懒判断机制实现的
最新回答
怪性酷男人

2022-07-16 06:49:57

Caffeine的expireAfterWrite过期机制确实主要依赖懒判断(惰性清理)。



1. 核心实现原理:

当写入缓存时,Caffeine并不会马上创建定时器监控过期时间,而是在读取缓存项时同步检查时间戳。如果发现距离写入时间已超过设定阈值,则会自动将该数据标记为失效并清理。



2. 触发清理的两种情况:

(1)被动触发:每次调用get方法时自动检测时效性,过期则清除后返回空值

(2)主动维护:后台维护线程会周期性地抽检部分数据(但频率远低于实时监控),这种组合设计既能保证时效性,又避免了频繁扫描带来的性能损耗。



这种机制类似于超市食品货架的管理方式:员工不会每天盘点所有商品,而是顾客拿起商品时会检查保质期,同时进行定期货架巡检。相较于实时监控体系,既节省资源又满足实用需求。



多数高性能缓存框架(如Redis、Memcached)都采用类似的混合清理策略。Caffeine还支持expireAfterAccess(访问后过期)等其他策略,写入超时场景下同时设置maximumSize限制缓存总量,可更好防止内存溢出。在实际编码中,建议通过recordStats()方法开启命中率统计,便于评估缓存配置合理性。