本地缓存 Caffeine 中的时间轮(TimeWheel)是什么?

💡 原文中文,约16300字,阅读约需39分钟。
📝

内容提要

本文介绍了 Caffeine 缓存的元素过期策略,包括 expireAfterAccess、expireAfterWrite 和自定义过期策略 expireAfter。自定义策略利用时间轮(TimeWheel)管理过期事件,定期检查元素是否过期,并根据剩余有效期调整元素在时间轮中的位置,以实现高效的过期管理。

🎯

关键要点

  • Caffeine 缓存提供三种元素过期时间策略:expireAfterAccess、expireAfterWrite 和自定义过期策略 expireAfter。
  • expireAfterAccess 和 expireAfterWrite 的过期机制简单,通过遍历队列中的元素并比较时间来判断是否过期。
  • 自定义过期策略 expireAfter 使用时间轮(TimeWheel)管理过期事件,提供高效的过期管理。
  • Caffeine 缓存的维护方法 maintenance 负责执行缓存的驱逐和过期策略。
  • TimeWheel 是一个分层的时间轮,能够以 O(1) 的时间复杂度添加、删除和触发过期事件。
  • TimeWheel 将计时器事件存储在循环缓冲区的桶中,按层次结构管理不同时间跨度的事件。
  • 向 TimeWheel 添加元素时,会根据元素的过期时间计算其在时间轮中的位置。
  • TimeWheel 的 advance 方法用于推进时间,检查并处理过期事件。
  • expire 方法处理过期节点,将未过期的节点重新调度到更精准的时间层级。
  • Caffeine 缓存通过时间轮机制实现精准的元素过期管理,优化了过期检查的效率。
➡️

继续阅读