Redis(六)过期键删除策略(一)

大哥打扰一下,Redis(六)过期键删除策略(一)
最新回答
摘星入眼

2026-10-24 07:14:26

Redis过期键的删除策略有三种,分别是:定时删除、惰性删除和定期删除。

一、定时删除

策略描述:在设置键的过期时间的同时,创建一个定时器,让定时器在键过期时间来临时,立即执行对键的删除操作。

优点:

  • 内存友好:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存。

缺点:

  • CPU不友好:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间。在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,会对服务器的响应时间和吞吐量造成影响。
二、惰性删除

策略描述:放任键过期不管,但是每次从键空间获取键时,都检查取得的键是否过期。如果过期的话,就删除该键;如果没有过期,就返回该键。

优点:

  • CPU友好:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键。这个策略不会在删除其他无关的过期键上花费任何CPU时间。

缺点:

  • 内存不友好:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占用的内存就不会释放。在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话,那么它们也许永远不会被删除(除非用户手动执行flushdb),这种情况可以看作是一种内存泄漏。
三、定期删除

策略描述:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

优点:

  • 平衡CPU和内存使用:定期删除策略是前两种策略的一种整合和折中。它每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。同时,通过定期删除过期键,也有效地减少了因为过期键而带来的内存浪费。

总结:

  • 定时删除:适用于对内存要求严格,但对CPU时间不太敏感的场景。
  • 惰性删除:适用于对CPU时间要求严格,但对内存使用不太敏感的场景。
  • 定期删除:在CPU时间和内存使用之间取得了平衡,适用于大多数实际应用场景。

Redis在实际应用中,通常会结合使用惰性删除和定期删除这两种策略,以在内存使用和CPU时间之间找到一个合理的平衡点。