Redis 的过期策略以及内存回收机制

一、Redis过期策略

 redis是如何处理过期的key?

     分为2种:passive (被动)和active(主动)

     所谓被动的处理方式就是 :当一些客户端进行访问的时候,秘钥被动过期,并且发现秘钥超时

    只有被动是不够的,因为所有过期的秘钥是永远不会被访问的,所以Redis有自己的过期算法。

    Redis 每秒运行10次 会执行以下概率算法:

  1. 从相关的过期秘钥集合中随机测试20个秘钥。
  2. 删除所有已找到的秘钥。
  3. 如果有超过25%的秘钥过期,重新执行第一步。

这就意味着任何时刻,使用内存的键已经过期的最大数量最大等于每秒的最大写操作量除以4。

参考官方文档:https://redis.io/commands/expire

二、内存回收机制

回收策略 主要用于 当redis用于缓存的内存不足时,如何处理写入和申请内存空间

maxmemory <bytes>  #最大内存 单位字节
maxmemory-policy noeviction   #默认
  1. noeviction -> 不做任何处理,只在写入时 ,提示错误
  2. volatile-ttl -> 删除最近到期的key
  3. allkeys-random -> 随机删除任意key
  4. volatile-random -> 删除具有过期时间的随机秘钥
  5. allkeys-lfu -> 移除最近最少使用的key
  6. volatile-lfu -> 在设置了过期时间的键空间中,移除最近最少使用的key
  7. allkeys-lru -> 移除最少使用的key
  8. volatile-lru -> 在设置了过期时间的键空间中,移除最少使用的key

LRU意味着最近最少使用,LFU指最少使用

LRU、LFU和最小TTL算法不是精确算法,而是近似的,如果需要调整的话

maxmemory-samples 5

默认5 已经很好了,如果需要精准度更高可以调大,但是性能就下降,反之亦然。

猜你喜欢

转载自blog.csdn.net/qq_38423105/article/details/82720956