redis key过期策略:定期删除+惰性删除

Redis如何淘汰过期的keys

定期删除

隔⼀段时间,就随机抽取⼀些设置了过期时间的 key,检查其是否过期,如果过期就删除,定期删除可能会导致很多过期 key 到了时间并没有被删除掉

惰性删除

当⼀些客户端尝试访问它时,key会被发现并检查取得的键是否过期,如果过期的话,就删除该键

Redis服务器实际使用的是惰性删除和定期删除两种策略
通过配合使⽤这两种删除策略,服务器可以很好地在合理使⽤CPU时间和避免浪费内存空间之间取得平衡
定期删除漏掉了很多过期key,惰性删除也没发现。如果⼤量过期 key 堆积在内存⾥,导致 redis 内存块耗尽了,就需要⾛内存淘汰机制

Redis的Key淘汰策略

redis在占⽤的内存超过指定的maxmemory之后,通过maxmemory_policy确定redis是否释放内存以及如何释放内存

策略

  • noeviction(默认)
    • 不做任何的清理⼯作,在redis的内存超过限制之 后,所有的写⼊操作都会返回错误;但是读操作都能正常的进⾏;
  • volatile-lru(least recently used)
    • 最近最少使⽤算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉
  • volatile-lfu(least frequently used)
    • 最近最不经常使⽤算法,从设置了过期时间的键中选择某段时间之内使⽤频次最⼩的键值对清除掉;
  • volatile-ttl
    • 从设置了过期时间的键中选择过期时间最早的键值对清除 (删除即将过期的
  • volatile-random
    • 从设置了过期时间的键中,随机选择键进⾏清除;
  • allkeys-lru
    • 最近最少使⽤算法,从所有的键中选择空转时间最 ⻓的键值对清除;
  • allkeys-lfu
    • 最近最不经常使⽤算法,从所有的键中选择某段时 间之内使⽤频次最少的键值对清除;
  • allkeys-random
    • 所有的键中,随机选择键进⾏删除;