缓存淘汰算法

一、LRU

LRU是最近使用,和访问频率没关系,只要是最近使用过,就放在队列后面,满了就把前面的删掉。

实现原理
ReferenceEntry<K, V> accessQueue;

当我们get(Key) 去访问缓存时,accessQueue删除对应的Key,
在把Key追加到accessQueue的尾部。所以经常访问都一直排在后面。
如果满了,就把头部的第一个删了。

二、FIFO

FIFO算法原理:FIFO算法类似于队列,新数据插入到队列尾部,当缓存空间不足时,淘汰队列头部的数据。注意这个和LRU不同的点在于,放问存在的元素,不会改变他在队列的位置,LRU是访问存在的元素会移动到队尾。

基本操作:

"插入":新数据项被添加到队列尾部。
"访问":访问缓存中的数据项不会改变它在队列中的位置。
"淘汰":当缓存已满时,淘汰队列头部的数据项。

三、LFU

LFU是按访问频率最低的删除,所有数据在cache集合,还要有一个Map记录每个Key的访问次数。就比如下面的结构。

// 简化版的LFU思想
Map<Key, Value> cache;
Map<Key, Integer> accessCount; // 记录每个key的访问次数

四、SLRU

在这里插入图片描述
可以这么理解:先进入淘汰段,淘汰段也是一个LRU算法,当淘汰段满了,移除最早进来的,如果有重复的就会进入保护段,当保护段满了,进了新的元素,会吧数据挤到淘汰段里面去。

五、近似计数器

在这里插入图片描述
在这里插入图片描述

对一个数进行多次Hash运行,得到对应的下标位置,然后将下标位置加1,当统计某个key的出现次数时,只需要找到他所有的下标位置所对应的数,取出最小的那一个。

在这里插入图片描述

三、window-Tiny-LFU (W-T-LFU)

在这里插入图片描述
在这里插入图片描述
元素先进入窗口缓存,窗口缓存数据比较少,使用LRU,被挤出的元素,和淘汰段LRU的元素比对,怎么比对,从LRU最容易淘汰的元素比较,然后找到这个元素在布隆过滤最少的数值,对比。如果输了,就淘汰,赢了,就进入淘汰段。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值