Redis数据缓存淘汰策略详解:FIFO、LFU、LRU与2Q算法
创作时间:
作者:
@小白创作中心
Redis数据缓存淘汰策略详解:FIFO、LFU、LRU与2Q算法
引用
CSDN
1.
https://blog.csdn.net/2401_83384536/article/details/138311686
Redis作为一款高性能的键值存储系统,其数据缓存淘汰策略对于系统的性能和效率有着至关重要的影响。本文将详细介绍几种常见的缓存淘汰算法,包括FIFO、LFU、LRU以及2Q算法。
FIFO:先进先出算法
FIFO(First in First out)算法的核心原则是:如果一个数据最先进入缓存中,则应该最早被淘汰掉。
- 利用一个双向链表保存数据
- 当来了新的数据之后便添加到链表末尾
- 如果Cache存满数据,则把链表头部数据删除
- 然后把新的数据添加到链表末尾
- 在访问数据的时候,如果在Cache中存在该数据的话,则返回对应的value值
- 否则返回-1。如果想提高访问效率,可以利用hashmap来保存每个key在链表中对应的位置
LFU:最近最少使用算法
LFU(Least Frequently Used)算法淘汰一定时期内被访问次数最少的数据,以次数作为参考。
- 新加入数据插入到队列尾部(因为引用计数为1)
- 队列中的数据被访问后,引用计数增加,队列重新排序
- 当需要淘汰数据时,将已经排序的列表最后的数据块删除
LRU:最近最少使用算法
- 每当缓存命中(即缓存数据被访问),则将数据移到链表头部
- 当链表满的时候,将链表尾部的数据丢弃
Two queues(2Q):2Q算法
2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。
- 新访问的数据插入到FIFO队列
- 如果数据在FIFO队列中一直没有被再次访问,则最终按照FIFO规则淘汰
- 如果数据在FIFO队列中被再次访问,则将数据移到LRU队列头部
- 如果数据在LRU队列再次被访问,则将数据移到LRU队列头部
- LRU队列淘汰末尾的数据
这种情况适用于以下场景:
当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。周期性的批量操作,会立即淘汰LRU队列中的大量数据,导致缓存命中率大幅度下降。而APP常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
热门推荐
五胡乱华:给中国带来的灾难与改变
教科书对五胡乱华一笔带过,究竟发生了什么?对后世有什么影响?
健身房要具备哪些设备和功能
第二类和三类医疗器械注册管理有哪些规定?
“伤官配印”的底层逻辑解析,野马一样的思维需要印星提供边界感
该考研究生还是直接工作?如何选择最适合自己的路
骨折伤残等级评定标准一般是几级
扁桃体白点的常见原因及治疗方法
胶质瘤怎么能查到良性恶性
电脑联网详解:有线与无线连接方式及常见问题处理指南
每天最“增寿”的一小时,可惜很多人都浪费了
圣心百合室外能过冬吗
《僵尸肖恩》中的英式文化和英式幽默
团队里如何管理同龄人
痛风性关节炎,应该吃什么不吃什么?
探究生普洱茶与红枣的搭配:营养价值、泡法与功效全解析
简单又好喝的奶茶
2025年最值得收藏的数据结构与算法学习路线
如何理解理财产品的收益机制?这种机制如何进行规避和观察?
重返中超,官方:前津门虎外援罗萨加盟南通支云
数字电路基础:CMOS基本电路详解
期货为何存在技术分析?技术分析的局限性是什么?
自媒体运营必修课:如何有效蹭热点提升流量
Nature研究报告:AI革命的数据正在枯竭,研究人员该怎么办?
汽车镀膜的效果如何评估?怎样选择适合的汽车镀膜产品?
中远海特:预计2024年净利13.3亿元-15.43亿元 同比增长25%-45%
5000余部古籍在线可查,江苏省古籍数字资源集成平台年底发布
注意这些表现,可能是食物过敏
央视315曝光:杨铭宇黄焖鸡存在严重食品安全问题
二手房买卖风险防范指南:法官提示五项关键要点