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常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
热门推荐
细数日本侵华时对中国文物的掠夺惨剧,仅图书就被抢超1000万册
调料的种类与调配原则:如何提升菜肴的风味与层次感?
改变孩子的“重口味”,家长做好这两件事 | 吃出健康来
双峰骆驼奶到驼奶粉的"变身"及营养价值全解析
世卫组织旗下机构提示滑石粉"很可能"致癌
万州式内引 “九龙”出水“跨越”三峡
平躺时呼吸困难、胸部压迫感?可能是这些原因
万姓的起源:从鲜卑族到儒家文化
推动红色旅游与各产业深度融合
软件生产期PPT封面页设计指南:从品牌到视觉全方位解析
酒店薪酬体系怎么设计才能激励员工?
物联网大全:定义、应用及未来发展趋势
麦仁的功效与作用及营养价值
食用橄榄油的质量等级标准及选购指南
海湾地区股市大跌,沙特阿美跌超6%
如何认识居民小区的环境特点?这种认识对居民生活有何影响?
现场音效低音(探索低音的魅力与影响)
舍曲林的分子解读与合成路线分析
民间关于童子的总结_童子的典故
固态电池合作协议频频发出,产业化提速可期?
生存战争2.4:全新四季系统开启海岛生存新篇章
SPSS多元线性回归分析预测怎么做 SPSS多元线性回归分析结果怎么看
《英雄联盟》新英雄重塑游戏战术格局
什么是小市值股票的特点?投资小市值股票需要注意什么?
什么是小市值股票:小市值股票的特点
家装水泥如何选,买325的还是425的呢?很多人不知道,都买错了
投标全流程攻略:从解析招标信息至项目实施技巧解析
人生最高级的觉悟是:有憧憬,有反思,有释怀
新视角一探宋朝的历史与文化
花卉设计原则有哪些?如何应用到实际中?