caffeine
2025-04-23 19:43:40 0 举报
caffeine 的主要流程
作者其他创作
大纲/内容
不管什么操作都会触发这个方法,维护各种队列的数据
用户操作
get
数据
drainWriteBuffer消费处理完WriteBuffe中数据
保护区80%
climb调整三个区的大小
expireEntries处理过期策略
从各种队列中移除节点
同步时间轮的结点
map.get
map.put
窗口区元素数量大于阈值会转移到试用区
移除时间轮节点任务
遍历虚引用软引用队列并驱逐节点
如果有定时处理
调整结点在分区的队列位置(也可能调整结点所在的分区)
AddTask
通过缓存命中统计数据调整各个区的大小
FrequencySketch使用一个 long[] 保存频率,它的实现原理和布隆过滤器类似,牺牲了部分准确性,但减少了占用内存的大小
对各种过期的结点进行驱逐
一个ConcurrentHashMap
drainValueReferences处理 value 的引用
维护结点在队列的位置
试用区19%
maintenance
更新时间轮节点任务
窗口区1%
put/load
添加结点到窗口区队列
更新访问频率
drainKeyReferences处理 key 的引用
Read Buffer
evictEntries处理驱逐策略
遍历队列,一个个比。驱逐掉频率低的,直到不超过阈值
UpdateTask
Write Buffer
drainReadBuffer消费完ReadBuffer中数据
对试用区和保护器的结点进行驱逐
RemovalTask
0 条评论
下一页