redis 过期策略

过期策略

定期删除+惰性删除

所谓定期删除,指的是 redis 默认是每隔 100ms随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

1.注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key。而是每隔 100ms 随机抽取一些 key 来检查和删除的。

2.问题,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,所以就有了惰性删除:

即在你获取某个 key 的时候,redis 会检查一下这个 key, 如果设置了过期时间并且过期了,则在此时就删掉这个key,不会返回任何内容。

3.实际上,如果定期删除漏掉了很多过期 key,也没去查询这些key,也就没走惰性删除,那么如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整?

答案是:走内存淘汰机制。

内存淘汰机制

--redis官方文档

redis 内存淘汰机制有以下几个:

  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。最常用的
  • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

LRU相关请移步这篇文章LRU

原文地址:https://www.cnblogs.com/charm-j/p/10373410.html