当前位置: 首页 > news >正文

Guava Cache淘汰算法

Guava Cache 使用的淘汰算法是 “基于访问顺序的近似 LRU,具体来说是一种分段 LRU” 实现,注意是近似LRU。

Guava Cache 借鉴了 ConcurrentHashMap的分段锁思想,将缓存分成多个 “Segment”(段),每个 Segment 内部维护自己的访问队列,实现独立的 LRU 淘汰。

数据结构设计

每个 Segment 内部维护两个双向链表

// 简化的数据结构示意
class Segment<K, V> {// 基于访问顺序的双向链表(LRU核心)@Nullable ReferenceEntry<K, V> accessQueueHead;  头部@Nullable ReferenceEntry<K, V> accessQueueTail;  尾部// 基于写入顺序的双向链表(用于过期策略)@Nullable ReferenceEntry<K, V> writeQueueHead;   头部@Nullable ReferenceEntry<K, V> writeQueueTail;   尾部
}

访问顺序维护

当缓存项被访问时(读或写),Guava 会将其移动到访问队列的尾部"(MRU 端):

// 伪代码:记录访问
void recordAccess(ReferenceEntry<K, V> entry) {// 从当前位置移除evictFromAccessQueue(entry);// 添加到尾部(最近使用)addToAccessQueue(entry);
}

淘汰发生在写入新数据时,当缓存大小超过限制:

// 伪代码:淘汰过程
void evictEntries() {if (!overMaximumSize()) {return; // 未超限,不淘汰}// 从访问队列头部(LRU端)开始淘汰ReferenceEntry<K, V> eldest = accessQueueHead;while (eldest != null && overMaximumSize()) {// 移除最久未使用的条目removeEntry(eldest, RemovalCause.SIZE);eldest = accessQueueHead; // 移动到下一个}
}

为什么是"近似"LRU?

Guava Cache 的 LRU 是近似的,主要原因:

1、并发性能优化:在并发环境下,为了减少锁竞争,访问记录的更新是延迟的:

// 读操作时并不立即更新队列,而是先记录"可能需要更新"
void get(key) {Entry entry = findEntry(key);if (entry != null) {// 不是立即移动,而是设置标志位entry.setAccessTime(System.currentTimeMillis());// 实际的队列更新可能批量进行}
}

2、分段设计的影响

由于缓存被分成多个 Segment,每个 Segment 独立维护 LRU 队列。淘汰时:
1、优先淘汰访问频率最低的 Segment" 中的条目
2、而不是全局严格的 LRU 顺序

淘汰的过程案例

初始: [A]
添加B: [A, B]        // A(最久), B(最新)
添加C: [A, B, C]     // A(最久), B, C(最新)
访问A: [B, C, A]     // B(最久), C, A(最新) - A被移到尾部
添加D: [C, A, D]     // 淘汰最久的B,添加D到尾部
http://www.dtcms.com/a/574035.html

相关文章:

  • 门户网站类是什么意思怎么给自己做个网站吗
  • 小朋友做安全教育的网站慈溪做网站什么价
  • 设计一个网站的步骤深汕特别合作区包括哪些地方
  • 2.5 HuggingFace Transformers 库实战
  • 宿州建设企业网站公司做网站的有哪些学校
  • 网络通信的奥秘:HTTP详解 (七)
  • 福建网站建设科技有限公司那些网站做的非常好看的
  • 网站建设老李教学网站商务贸易网站建设
  • 11.5 脚本 本地网站收藏(解封归来)
  • Web APIs 学习第四天:DOM事件进阶
  • 后台网站设计织梦 蓝色 个人网站博客网站源码
  • 余姚网站建设公司wordpress 支付宝免签
  • 仓颉编程语言基础集合类型详解:从Array到HashMap的实战指南(一)
  • 网站负责人姓名wordpress 阿里百秀主题
  • 【C++学习】deque容器
  • 网站程序代码更加精准高效的措施
  • 宁波网站建设h5哪个做网站平台好
  • Apache IoTDB 技术深度解析:存储引擎、查询优化与分布式架构在工业物联网、智慧能源和车联网场景的应用指南
  • rap2部署
  • IOT-VIP——STM32F031K6U6+RS485+显示屏
  • 工业互联网 “云 - 边 - 端” 架构
  • c#网站开发框架深圳网站建设收费
  • MAC电脑上拉取Git仓库的方法
  • 怎样在网做旅游网站顺企网浙江网站建设
  • 时序数据库系列(四):InfluxQL查询语言详解
  • 如何建设专业化的网站全球搜索网站排名
  • Android WebView - loadUrl 方法的长度限制
  • 温州网站推广公司wordpress万能
  • 开题报告之基于SpringBoot框架的在线答题网站的设计与实现
  • 珠海建站专业做辅助的网站