Redi是如何淘汰key的?
首先我们来学习 Redis 的淘汰原理。
系统线上运行中,内存总是昂贵且有限的,在数据总量远大于 Redis 可用的内存总量时,为了最大限度的提升访问性能,Redis 中只能存放最新最热的有效数据。
当 key 过期后,或者 Redis 实际占用的内存超过阀值后,Redis 就会对 key 进行淘汰,删除过期的或者不活跃的 key,回收其内存,供新的 key 使用。Redis 的内存阀值是通过 maxmemory 设置的,而超过内存阀值后的淘汰策略,是通过 maxmemory-policy 设置的,具体的淘汰策略后面会进行详细介绍。Redis 会在 2 种场景下对 key 进行淘汰,第一种是在定期执行 serverCron 时,检查淘汰 key;第二种是在执行命令时,检查淘汰 key。
第一种场景,Redis 定期执行 serverCron 时,会对 DB 进行检测,清理过期 key。清理流程如下。首先轮询每个 DB,检查其 expire dict,即带过期时间的过期 key 字典,从所有带过期时间的 key 中,随机选取 20 个样本 key,检查这些 key 是否过期,如果过期则清理删除。如果 20 个样本中,超过 5 个 key 都过期,即过期比例大于 25%,就继续从该 DB 的 expire dict 过期字典中,再随机取样 20 个 key 进行过期清理,持续循环,直到选择的 20 个样本 key 中,过期的 key 数小于等于 5,当前这个 DB 则清理完毕,然后继续轮询下一个 DB。
在执行 serverCron 时,如果在某个 DB 中,过期 dict 的填充率低于 1%,则放弃对该 DB 的取样检查,因为效率太低。如果 DB 的过期 dict 中,过期 key 太多,一直持续循环回收,会占用大量主线程时间,所以 Redis 还设置了一个过期时间。这个过期时间根据 serverCron 的执行频率来计算,5.0 版本及之前采用慢循环过期策略,默认是 25ms,如果回收超过 25ms 则停止,6.0 非稳定版本采用快循环策略,过期时间为 1ms。
第二种场景,Redis 在执行命令请求时。会检查当前内存占用是否超过 maxmemory 的数值,如果超过,则按照设置的淘汰策略,进行删除淘汰 key 操作。
-
mysql数据库优化
优化数据库的方法1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会... 667 0 21-07-27 -
微擎打卡赚钱小程序源码
打卡小程序远远比影视的赚钱利用打卡获得金币来吸引用户从而获得流量主简单的搭建方式 上传到微擎直接奔放下面是导航路径个人中心 /bh_ri... 1127 0 24-06-03 -
语音转文字,文字转语音,两极互转
文字转语音1 AI配音专家这是吾爱大神bawangxx自己开发的一款软件,采用的是阿里的语音合成引擎,而且项目完全开源,大家可以去github查找... 715 0 25-03-10 -
IT书单小程序
【IT书单微信小程序】是一个包含微信小程序开发源代码和相关截图的资源包,主要针对那些想要学习或构建类似应用的IT从业者。这个项目提供了... 972 0 24-09-16 -
2012政治,思想品德专业教师招聘试题
【豆丁★教育百科】012四川省拟任县处级党政领导职务政治理论水平任职资格考试第十二套试题.doc【豆丁★教育百科】111初中政治教师业务考试... 1191 0 24-08-20 -
2025年启航西综全程班考研资料
21.基础阶段生物化学测试卷.pdf22.基础阶段生物化学测试卷答案.pdf22.基础阶段病理学测试卷.pdf23.基础阶段病理学测试卷答案.pdf33.基础阶... 923 0 24-08-19 -
uTools一款汇集了众多插件的生产力工具箱
它是一款可以通过选择丰富插件自行 DIY 的电脑工具箱。但它不仅仅只是一款万能工具箱,它还是一款快速启动器,可以快速启动电脑软件和设... 563 0 21-07-16 -
医学微视 - 免费医学知识分享
医学微视是一个以视频的方式分享各种医学知识的良心网站,它上面的视频全部支持免费观看,是一个非常实用的免费医学科普教育网站。它是中国医学科学院健康科普研究中心监制的一个网站。 445 0 21-11-08
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~