前言:Redis的所有数据结构都可以设置过期时间,而redis内部有一系列策略来回收已经过期的数据结构。
过期的key集合
- redis实现了一套事件触发模型,主要处理两种事件:
I/O事件
和定时事件
。 - redis会将设了过期时间的key都存入一个独立的字典中。一是启动
定时事件
去遍历字典,二是当发生I/O事件
(如读、写命令)时,就使用惰性策略去删除过期的key - 定时删除是集中处理,惰性删除是零散处理。
扫描策略
Redis默认会每秒进行十次过期扫描,每次不会遍历整个字典,而是采用一种贪心策略。
- 从过期字典中随机选择20个key
- 删除这20个key中已过期的key
- 如果过期的key比例超过1/4,重复步骤1
同时,每个扫描默认不超过25ms,保证每次扫描不会占用太久时间。
从库的过期策略
从库不会进行过期扫描,从库对过期的处理是被动的。主库在key到期时,会在AOF文件里增加一条del指令,同步到所有的从库,从库通过执行这条del指令来删除过期的key。