过期键删除策略

数据库键的过期时间都保存在了过期字典expires中,该过期字典的key是一个指针类型,指向实际的key空间,value记录的是unix时间戳,单位是毫秒。

删除策略主要有以下三种(该删除策略是通用的删除策略,redis使用的是其中的两种,详情见下文):

  • 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。
  • 惰性删除:放任键过期不管,但每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
  • 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则有算法决定。

在这三种策略中,定时删除和定期删除是主动删除策略,而惰性删除则是被动删除策略。

以下是三种删除策略的优缺点:

  • 定时删除:对内存友好但对CPU不友好。
  • 惰性删除:对CPU友好但对内存不友好。
  • 定期删除:定期删除策略的难点是确定删除操作执行的时长和频率。

redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。

你可能感兴趣的:(过期键删除策略)