pexpire key底层逻辑是如何实现这个延迟功能?

一个redis中可能同时存在很多很多key,这些可以中可能有很大一部分都有过期时间。此时,redis服务器咋知道哪些key已经过期要被删除,哪些key还没有过期?

为什么要这么问?因为如果直接遍历所有的key,显然是行不通的,效率非常低。

所以redis的整体策略是:1.惰性删除,2.定期删除。

1.惰性删除

假设这个key已经到了过期时间了,但是暂时还没删除它,key还存在,紧接着,后面有一次访问,正好用到这个key,于是这次访问就会让redis服务器触发删除key的操作,同时返回一个nil。(插一嘴,因为我比较喜欢把相似的东西放在一起思考,比如优先队列的更新里面的一个值就是使用的这个方法,将旧的值先放着,插入新的值,当访问到这个值的时候再将其删除。)

2.定期删除

每次抽取一部分,进行验证过期时间,保证这个抽取检查的过程要足够快!

为啥这里对于定期删除有明确的要求呢?因为这个redis是单线程程序。(如果扫描过期的key消耗太多的时间,就有可能导致正常的处理请求命令被堵塞,就和执行keys *命令一样不好的效果)

相关推荐
码哥字节3 小时前
缓存一致性:先删缓存还是先更新库?3 种方案对比 + 实战
redis
2501_933923254 小时前
解读Redis:单线程模型
数据库·redis·缓存
我不会起名字3224 小时前
seq 空洞排查:Mongo 的 51 只是预留上界,Redis CURR 才是已消耗边界
redis·后端·mongodb·go·即时通讯·im·故障排查
时间的拾荒人8 小时前
Redis 集合类型详解:Set 与 Zset
redis·缓存·面试
鶴哥只手遮天9 小时前
《Redis 8.10.3 深度剖析》系列 ·第 17 章. 一个迟到十六年的类型
redis·后端·开源
IT规划师12 小时前
Redis 数据类型全解 - 数据类型选型矩阵:一张表、一棵树、四条线(十二)
redis·数据类型
虹科网络安全21 小时前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
大大大大晴天1 天前
每天认识一个组件:Redis
redis