Redis 共有 3 种过期策略:定时删除、惰性删除、定期删除;
三者对比如下:
说明 | 优点 | 缺点 | |
---|---|---|---|
定时删除 | 在设置 Key 过期时间的同时创建定时器,让定时器在 Key 过期时执行删除操作 | 保证过期数据能被及时删除 | 耗 CPU,尤其当存在大量非永久 Key 时,对 CPU 影响更严重 |
惰性删除 | Key 过期时不主动删除,获取数据时判断该 Key 是否过期,如果过期直接删除 | 对 CPU 消耗小 | 耗内存,如果数据过期但又没有任何操作来获取该数据,哪怕数据已经过期了,但该数据任会一直存在 |
定期删除 | 每隔一段时间执行一次删除操作 | 不如定时删除那么消耗 CPU,也不如惰性删除那么占内存 | 比定时删除更消耗内存,必惰性删除更消耗 CPU |
原因
默认情况下,Redis 使用的是惰性删除 + 定期删除的策略,过程如下:
- 每隔一段时间,Redis 会分别去各个库随机拿
20
个非永久 Key,判断它们是否过期,过期则删除,如果这一次拿的 key 中有超过 1/4 的数据过期,则再执行一遍过程 1,直到过期数据不超过当次拿出来的20
条记录的 1/4(可以通过配置redis.conf
中的