Redis通过定时任务来主动检查键是否过期。Redis会在每个键的设定过期时间时,同时创建一个定时器(timer)以监视键的过期情况。当键到达过期时间时,Redis会根据不同的删除策略来处理过期键的清理工作。
常见的过期键删除策略包括:
- 惰性删除(Lazy Expiration):在访问某个过期键时,Redis会先检查该键是否过期,如果过期则立即删除。这种方式会导致过期键在过期后仍保留一段时间,直到被访问到时才被清理。
- 定期删除(Eviction Policy):Redis会定期地(通常是100毫秒)随机抽取一些过期键进行检查和删除。这种策略能够在一定程度上保持系统性能稳定,但不能保证过期键被及时清理。
- 定时删除(Expiration Check):Redis会在每次执行命令时,随机抽取一些过期键进行检查和删除。这种策略相比于定期删除更加灵活,可以根据实际负载情况动态调整清理频率。
- 内存淘汰策略:当内存占用达到一定阈值时,Redis会根据配置的内存淘汰策略(如LRU、LFU等)来选择要删除的键。这种策略虽然不是专门针对过期键的删除,但也能帮助清理过期键以释放内存空间。
总的来说,Redis通过定时任务和不同的过期键删除策略来管理过期键的清理工作,确保系统能够及时有效地清理过期数据,保持系统性能和内存稳定。