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常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
热门推荐
高中艺术生和普通生的区别
国际空运保险全解析:责任范围、除外责任与市场挑战
可持续城市:将生物多样性融入城市设计
雨水至,万物生 | 解锁节气里的文化密码
《哪吒2》太懂中医了!电影里的这些中医药知识,大有讲究
如何撰写有效的辩护词
深化专业发展,共筑调解新篇章 ——深圳市行业性专业性人民调解员业务培训班圆满举行
先帝遗命与继任者的承担:历史中的临终重托
公司考勤打卡软件的主要功能有哪些?
注册安全工程师和监理工程师哪个好考?就业前景分析
这些事项都属于工作秘密,你知道吗?
众里寻他千百度,蓦然回首,那人却在,灯火阑珊处的意思及全词翻译赏析
左上肋骨疼怎么办
EMC滤波器在变频器中的应用
英语技能大赛看图说话的评分标准是什么?
全国中医药大学最新排名:北京中医药大学夺冠,南中医排第4名
ETC应该去哪个部门办理?办理ETC的流程和要求是什么?
父母应该如何鼓励孩子参加社交聚会来脱单?
自动驻车要挂n还是d?详解挂不同挡位的影响
TA分析斯特林现状:放手一搏或另寻新起点
房颤吃什么食物好?这些食物有助于心脏健康
牙周炎自愈的最佳方法
争夺抚养权时的证据怎么收集
战胜心魔,全方位策略帮你摆脱心理束缚,重拾生活掌控力与光芒
石墨烯对人类健康有哪些益处和功效,你知道吗?
海外仓一件代发物流时效分析:如何确保快速交付?
债务重组对企业信用的影响及应对措施
什么是存储Bucket,它有哪些用途?
从本地到全球:探索世界在多元文化中的角色
AB胶包含哪些类型的胶粘剂?