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常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
热门推荐
华为"天才少年"计划最新进展:华科三博士、西交两本科生入选
上海少有医院能给宝宝看牙,别让“中国式喂养”毁了第一口牙
车一年跑不到1万公里,建议各位这样保养就好了
中国遥感的SCI/SSCI论文
诺如病毒最怕三种药是什么?
异地被起诉怎么办?管辖权异议、应诉要点及缺席后果全解析
黄油与奶酪:乳脂双生的科学密码
王冕:墨梅七绝4首揭示孤傲灵魂,元末的艺术传奇!让人惊艳!
空调电辅热是否需要打开(以空调电辅热的优缺点及正确使用方法)
如何养出健康的仔猪?
如何增加信任度?
嘴巴张大上下颚连接处会痛怎么办?一文详解原因与治疗方法
完成从0到1的突破后,国产汽车芯片如何提高竞争力
AI算力需要巨大能源,核聚变正在突破!
杭州今日限行尾号时间表(每周更新)
南京失业金领取最低标准多少钱?2025年南京失业金可以领多久?
如何确保工伤赔偿协议书的法律效力?
工伤协议书怎样写才有法律效力
如何评估方案的可行性
什么是诉讼答辩权
揭秘:CCS到底是什么?
概念与范畴的联系和区别
这5个常见的配色问题,看完这篇就能解决!
红外二氧化碳检测仪:精准监测环境CO₂浓度的先进工具
苔藓植物长不高的原因,是由于植株自身没有办法形成维管束
Nature | 细胞能量需求驱动线粒体亚群分化与代谢分工
如何在项目中平衡创新性与预期效益?
肺癌患者应该怎么吃?(建议收藏)
鱼油可以保护心血管吗?该补充多少?
奖学金申请秘诀:软硬兼施 投其所好