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常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
热门推荐
炬医传承:从唐代孙思邈到现代中医药发展
孝顺保投保人与被保险人法律关系解析
发源安徽出圈河北,为何板面成石家庄城市IP
一生情深,词如人生:探寻李清照的诗词世界
英雄联盟:野区霸主——解析刷野最快的英雄
新马克思主义对当代社会变革的影响与思考
选择合适的光学镀膜材料:光学镜片镀膜一般用什么材料?应用实例深度剖析
河间府献县戈氏与“戈氏历”
2025年合太岁的生肖有哪些?五大生肖将与太岁共融共生
古典智慧:解读永恒的原则,开启人生新篇章
从《红楼梦》看奴婢的法律地位
信用卡对住房贷款的影响及应对策略
张译:电视剧奖项背后的演艺进阶之路,斩获多个重要奖项
黄梅戏起源与发展的争议解答:为何湖北黄梅是源头,而安庆成就其辉煌?
手握两大盐湖采矿权,“PPT锂王”要翻身了?
风电行业动态:技术创新引领产业升级
革新检测方式:艾滋病唾液检测——便捷、私密的新选择
大海会流“蓝眼泪”?这份“追泪”攻略快收好
如何用日语表达春夏秋冬?
如何用日语表达春夏秋冬?
《水调歌头》全文 古诗词翻译
银行揽储放大招!部分特色存款利率直逼大额存单 性价比究竟如何?
DHA的功效与作用:从大脑到心脏的全方位守护
李时珍:明代神医与他的本草纲目
《黄帝内经》的历史与意义
燃气入户总阀、旋塞阀、燃气连接管等燃气设施的正确操作过程
魔兽世界TBC附魔图纸出处大全:前期必备附魔指南
鲜槟榔的口感与味道全解析:甜还是辣?
意大利生菜的种植方法和时间
智能导诊、随访 四川大学华西医院“AI+医疗”提升就医体验