Redis对象过期机制详解
2024年1月1日
对象过期时间
是什么
redis 的过期时间是给一个 key 指定一个时间点,等达到这个时间,数据就被认为是过期数据,由 redis 进行回收
为什么要过期
- 如果不是需要常驻的数据,设置过去时间可以有效节约内存。
- 有些场景也是需要过期时间支持:缓存
- 如果存在时间过久,可能导致和数据源差距过大,而设置过期时间,可以很方便清除缓存以便后续再次加载进去
- 比如分布式锁:需要一定时间后,数据自动消失,以实现最大占据时间的特性
怎么设置过期时间
- 简单的字符串对象

- 更通用的过期命令 EXPRIRE,可以对所有数据对象设置过期时间,也可以分秒和毫秒

key 过期多久会被删除
三种过期键清除策略
定时删除:在设置键过期时间的同时,创建一个定时器,让定时器在键过期时间来临,立即执行对键的删除操作,定时删除对内存比较友好,但是对 CPU 不友好,如果某个时间段比较多的 key 过期,可能会影响命令处理性能- 惰性删除:是指使用的时候,发现 key 过期了,此时再进行删除,"只要不访问,过期不过期业务都无所谓",对 CPU 友好,对内存不友好
- 定期删除:每隔一段时间,程序对数据库进行一次检查,每次删除一部分过期 key ,属于一种渐进式兜底策略
定期删除
- 实现起来没有那么容易
- 主要考虑出现异常,有 key 遗漏了怎么办,以及如果程序重启,原来的定时器就随重启消失了,那就需要再启动时,对过期 key 进行一些操作,可能是重建定时器,这些都是额外的工作,引多了多余的复杂度
redis 采用的
- redis 采用惰性删除+定期删除结合
