当前位置:网站首页>面试官:Redis中过期的key是怎么被删除的?
面试官:Redis中过期的key是怎么被删除的?
2022-08-04 20:21:00 【51CTO】

介绍
我们可以给Redis中的key设置过期时间,那么当key过期了,它在什么时候会被删除呢?
如果让我们写Redis过期策略,我们会想到如下三种方案
- 定时删除,在设置键的过期时间的同时,创建一个定时器。当键的过期时间来临时,立即执行对键的删除操作
- 惰性删除,每次获取键的时候,判断键是否过期,如果过期的话,就删除该键,如果没有过期,则返回该键
- 定期删除,每隔一段时间,对键进行一次检查,删除里面的过期键
定时删除策略对CPU不友好,当过期键比较多的时候,Redis线程用来删除过期键,会影响正常请求的响应
惰性删除读CPU是比较有好的,但是会浪费大量的内存。如果一个key设置过期时间放到内存中,但是没有被访问到,那么它会一直存在内存中
定期删除策略则对CPU和内存都比较友好
Redis中key的过期策略
redis过期key的删除策略选择了如下两种
- 惰性删除
- 定期删除
惰性删除
客户端在访问key的时候,对key的过期时间进行校验,如果过期了就立即删除
定期删除
Redis会将设置了过期时间的key放在一个独立的字典中,定时遍历这个字典来删除过期的key,遍历策略如下
- 每秒进行10次过期扫描,每次从过期字典中随机选出20个key
- 删除20个key中已经过期的key
- 如果过期key的比例超过1/4,则进行步骤一
- 每次扫描时间的上限默认不超过25ms,避免线程卡死
因为Redis中过期的key是由主线程删除的,为了不阻塞用户的请求,所以删除过期key的时候是少量多次。源码可以参考expire.c中的activeExpireCycle方法
为什么要了解redis过期key的删除策略?
只有一个目的,让你知道设置key的过期时间为一个随机范围,不能都在同一时间过期,不然频繁的扫描过期字典会造成客户端的请求出现卡顿
参考博客
《Redis深度历险》老钱
边栏推荐
猜你喜欢

How to carry out AI business diagnosis and quickly identify growth points for cost reduction and efficiency improvement?

面试官:JVM运行时数据区包含哪几部分?作用是啥?

Chrome安装zotero connector 插件

37.轮播图
Force KouTi (5), the longest text string back

"WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!

ts集成和使用

AWS SES 的监控和告警

IIC驱动OLED

C#移动OA办公系统源码(基于微信企业号)
随机推荐
June To -.-- -..- -
从卖产品到卖“链路”:20条策略 解读直播带货迭代玩法
MYSQL gets the table name and table comment of the database
Initialization process of SAP UI5
WIN10系统如何开启终端
5G NR 笔记记录
JSD-2204-酷莎商城(管理员模块)-密码加密-Day10
蚂蚁集团时序数据库CeresDB正式开源
ASP.NET商贸进销存管理系统源码(带数据库文档)源码免费分享
二叉树的遍历
really time ntp service start command
zynq 记录
如何找到某个 ABAP structure 某字段的源头来自哪个数据库表
SAP UI5 ensures that the control id is globally unique implementation method
Differences in the working mechanism between SAP E-commerce Cloud Accelerator and Spartacus UI
Go study notes (Part 1) Configuring the Go development environment
泰山OFFICE技术讲座:底纹、高亮、边框的关系
Using Baidu EasyDL to realize forest fire early warning and identification
如何推动乡村振兴的落地
In July 2022, domestic database memorabilia