美文网首页
Redis的 过期策略 和 淘汰策略

Redis的 过期策略 和 淘汰策略

作者: 天命ming | 来源:发表于2019-10-22 15:32 被阅读0次

过期策略

  • 定时过期(主动淘汰),
    • Redis未使用
    • 每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除
    • 可以立即清除过期的数据,对内存很友好
    • 但是会占用大量的CPU资源去处理过期的数据,影响缓存的响应时间和吞吐量
  • 惰性过期(被动淘汰)
    • 只有当访问一个key时,才会判断该key是否已过期,过期则清除
    • 可以最大化地节省CPU资源,却对内存非常不友好,极端情况可能有大量过期key没有再次被访问,从而不会被清除,占用大量内存
  • 定期过期
    • 每隔一定时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key
    • 该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果

Redis 中同时使用了惰性过期和定期过期两种过期策略

Redis中定期过期策略算法大致实现

  1. redis.config中hz定义了serverCron任务的执行周期,默认为10,即CPU空闲时每秒执行10次
  2. 每次过期key清理的时间不超过CPU时间的25%,即若hz=1,则一次清理时间最大为250ms,若hz=10,则一次清理时间最大为25ms
  3. 清理时依次遍历所有的db
  4. 从db中随机取20个key,判断是否过期,若过期,则逐出
  5. 若有5个以上key过期,则重复步骤4,否则遍历下一个db
  6. 在清理过程中,若达到了25%CPU时间,退出清理过程

淘汰策略

淘汰策略 含义
volatile-lru 根据 LRU 算法删除设置了超时属性(expire)的键,直到腾出足够内存为止。如果没有可删除的键对象,回退到 noeviction 策略。
allkeys-lru 根据 LRU 算法删除键,不管数据有没有设置超时属性,直到腾出足够内存为止。
volatile-lfu 在带有过期时间的键中选择最不常用的。
allkeys-lfu 在所有的键中选择最不常用的,不管数据有没有设置超时属性。
volatile-random 在带有过期时间的键中随机选择。
allkeys-random 随机删除所有键,直到腾出足够内存为止。
volatile-ttl 根据键值对象的 ttl 属性,删除最近将要过期数据。如果没有,回退到 noeviction 策略。
noeviction 默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error)OOMcommand not allowed when used memory,此时 Redis 只响应读操作

建议使用 volatile-lru,在保证正常服务的情况下,优先删除最近最少使用的 key

在 redis.conf 中 # maxmemory-policy noeviction 配置淘汰策略

相关文章

  • Redis - 过期策略和内存淘汰策略

    Redis - 过期策略和内存淘汰策略 Redis内存过期策略 Redis是key-value数据库,我们可以设置...

  • Redis从入门到精通(三、Redis的过期策略和内存淘汰机制)

    此篇介绍了Redis过期策略以及Redis的内存淘汰机制,从内存淘汰的8种策略,如何开启内存淘汰策略到如何选择合适...

  • Redis 过期淘汰策略

    Redis 过期淘汰策略 redis的过期淘汰策略是非常值得去深入了解以及考究的一个问题。很多使用者往往不能深得其...

  • Redis几种常见问题

    1.Redis的过期策略以及内存淘汰机制 Redis采用的是定期删除+惰性删除策略+内存淘汰机制。 定期删除,Re...

  • Redis过期策略和淘汰策略

    一、Redis采用的过期策略 惰性删除+定期删除 惰性删除流程 在进行get或setnx等操作时,先检查key是否...

  • Redis的 过期策略 和 淘汰策略

    过期策略 定时过期(主动淘汰),Redis未使用每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清...

  • redis过期和淘汰策略

    缓存有效期和淘汰策略 Redis的数据已经设置了TTL,不是过期就已经删除了吗?为什么还存在所谓的淘汰策略呢?这个...

  • redis key过期策略和淘汰策略

    redis集群key分类 redis集群中的key统分为两类,分别是设置了过期时间的key和未设置过期时间的key...

  • Redis-17-内存淘汰策略

    述 上文介绍了redis中的过期策略,本文再来看一下内存淘汰策略 内存淘汰策略指的是用户存储的一些key可以被Re...

  • Redis的缓存淘汰策略LRU与LFU

    前言 Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(...

网友评论

      本文标题:Redis的 过期策略 和 淘汰策略

      本文链接:https://www.haomeiwen.com/subject/hdrqvctx.html