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 操作。
-
微笑话小程序
"微笑话小程序" 这个标题表明我们讨论的是一个关于小程序的开发资源,具体来说是一个笑话类的小程序。"源码"指的是编程语言编写的应用程序... 747 0 24-09-16 -
《考研英语词汇的逻辑》精选词汇-思维导图
0 情感 框架图.pdf0事件事态 框架图.pdf0人际 框架图.pdf0传媒 框架图.pdf0商业 单元框架图.pdf0宗教民俗 框架图.pdf0工业科技 框... 849 0 24-08-18 -
癌症只能在酸性身体中形成
癌症不能在弱碱性的人体中形成; 癌症只能在酸性身体中形成; 如果你有癌症,说明身体是酸性的; 癌症只能在一个酸性的身体扩展;... 869 0 25-03-03 -
显示器比例影响效率?16:10 比 16:9 更好用?
下方这份图表是 2009 年到 2023 年全球市场范围内不同分辨率的个人电脑屏幕占比变化。到了 2023 年的今天,16:9 的屏幕占比遥遥领先... 2275 0 24-07-17 -
Java案例开发
Java语言是一种非常强大的软件编程语言,Java平台则是一个完整的软件开发体系平台。Java 语言具备简单性、面向对象性、分布式、解释性、健... 985 0 24-05-28 -
2012化学专业教师招聘试题
【豆丁★教育百科】09合肥教师招聘考试真题.doc【豆丁★教育百科】09年中学化学教师招聘试卷.doc【豆丁★教育百科】11教师招聘试题.doc【豆... 1180 0 24-08-20 -
实用人体解剖图谱 概论与断面分册
《实用人体解剖图谱》结合临床的实际需要,按照人体的部位进行分册,即头颈分册、躯干内脏分册和四肢分册。为了让读者对人体的结构建立一个... 1102 0 24-06-18 -
Ant Design Vue 4.0 a-modal弹窗组件封装
父组件(部分)<template> <div> <a-button type="primary" ghost @click="dialogPanelStatus.signIngInfoStatus ... 696 0 25-04-07
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~