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

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

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

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

1.惰性删除

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

2.定期删除

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

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

相关推荐
charlotte102410243 小时前
Redis 简介:从诞生到数据类型,再到缓存三大问题
数据库·redis·缓存
一嘴一个橘子3 小时前
redis stream
redis
爱吃牛肉的大老虎4 小时前
Redis之分布式 Session问题
数据库·redis·分布式
java_nnnn4 小时前
数据库读写分离与 Redis 缓存:从 MySQL 查询压力到缓存机制
数据库·redis·缓存
hweiyu005 小时前
Redis命令:SCARD
redis·缓存
OxYGC5 小时前
[工程] Redis 配置文件redis.conf全解析
数据库·redis·bootstrap
夕除21 小时前
redis--数据类型 string list
redis
一条泥憨鱼21 小时前
【Redis | 黑马点评】分布式锁;Lua脚本;Redisson与看门狗 |源码万字详解
redis·分布式·lua
stark张宇1 天前
库存扣减的“锁”事:悲观锁、乐观锁、分布式锁
redis·分布式·mysql