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 操作。
-
苹果视频压缩编码转码输出软件 Compressor 4.8.0 Mac英/中文版
苹果视频压缩编码转码输出软件 Compressor 4.8.0 Mac英/中文版Compressor 4.8 包括以下优化和错误修复:预览在 Apple Vision Pro、... 1309 0 24-08-06 -
什么是高级的竞争
我们来说一说什么是高级的竞争。我们既然参与商业活动,那么竞争就不可避免,大多数情况下,我们容易陷入具体的竞争行为中,比如国美把店开... 1175 0 24-05-29 -
layui后台管理系统框架模板
黑色通用的后台管理框架layui模板。适用于OA企业管理,cms网站后台管理,商城后台管理通用模板html下载。特点:简洁好用,28个布局,UI 元... 704 0 21-06-24 -
class中函数的this指向
定义一个基础的类class Person { constructor(name = "杜恒") { this.name = name; } speak() { console.log(this); } }将... 769 0 25-04-07 -
企业公文\新闻信息范例
广告词简报简介声明述评说明书消息新闻信息专稿新闻信息.doc 1251 0 24-08-06 -
完整学习MC协议及优化client访问
异常错误响应接下来,我们来完整学习 Mc 协议。在学习 Mc 协议之前,首先来看看 Mc 处理协议指令,如果发现异常,如何进行异常错误响... 960 0 24-05-24 -
HTML、CSS、JavaScript网页制作从入门到精通
十多年前,Internet在国内开始流行。其中,网页作为互联网的主要媒介受到了电脑爱好者的广泛关注。由于当时网速限制,网页主要承载文本、图... 1031 0 24-05-24 -
软件设计师教程
软件产业是信息产业的核心之一,是经济社会发展的基础性、先导性和战略性产业,在推进信息化与工业化融合、促进发展方式转变和产业结构升级... 877 0 24-05-24
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~