美文网首页
redis过期策略

redis过期策略

作者: IT菜鸟学习 | 来源:发表于2018-12-02 21:46 被阅读0次

redis的过期策略有三种

  • 被动删除:当读/写一个已经过期的key时,会发生一个惰性删除,直接删掉这个过期的key。
  • 主动删除:由于惰性删除的策略无法保证过期数据被及时删掉,所以redis会定期主动淘汰一批已经过期的key
  • 当前已用的内存超过maxmemory限定时,触发主动情理策略。

在 Redis 中, 常规操作由 redis.c/serverCron 实现, 它主要执行以下操作

  • 更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等。
  • 清理数据库中的过期键值对。
  • 对不合理的数据库进行大小调整。
  • 关闭和清理连接失效的客户端。
  • 尝试进行 AOF 或 RDB 持久化操作。
  • 如果服务器是主节点的话,对附属节点进行定期同步。
  • 如果处于集群模式的话,对集群进行定期同步和连接测试。
    在redis2.6版本的时候,程序规定serverCron每1秒运行10次,平均每100毫秒运行一次。从redis2.8的时候开始,用户可以通过 修改hz选项来调整serverCron的每秒的执行次数
    redis.conf 配置
# The range is between 1 and 500, however a value over 100 is usually not
# a good idea. Most users should use the default of 10 and raise this up to
# 100 only in environments where very low latency is required.
hz 10

该策略不是统计所有的数据,是随机测试一批设置了过期时间的key并进行处理。测试到过期的key将被删除。每10秒做10次如下步骤:

  1. 随机测试设置了100个过期时间的key
  2. 删除所有已发现的过期的key
  3. 若删除的key超过25则重复步骤1

Redis-3.0.0中的默认值是10,代表每秒钟调用10次后台任务。

被动删除(CPU友好,内存不友好)

只有key被操作时候(如get),redis才会检查该key是否过期,如果过期则直接删除并返回NULL。

  1. 这种过期策略对cpu是友好的,删除操作只有在调用该key的时候才会进行,不会在其他的expire key上浪费无谓的CPU时间。
  2. 但是这种策略对内存是不友好的,一个key已经过期,但是他在操作之前不会被删除的,仍然占据内存空间。
主动删除

先说一下时间事件,对于持续运行的服务器来说,服务器需要定期对自身的资源和状态进行必要的检查和整理,从而服务器维持在一个健康稳定的状态,这类操作统称为常规操作(cron job)

  1. maxmemory
    当前已用内存超过maxmemory限定时,会触发主动清除策略
  • volatile-lru : 只对设置了过期时间的key进行LRU (默认值) (对已经设置了过期时间的数据结构,挑选最少使用的数据淘汰)
  • allkeys-lru: 删除LRU算法的key(从全部的数据结构,挑选最少使用的数据淘汰)
  • volatile-random : 随机删除即将过期的key(对已经设置了过期时间的数据,采用随机删除的数据淘汰)
  • allkeys-random : 随机删除(对所有的数据,采用随机删除的数据淘汰)
  • volatile-ttl :删除即将过期的(只对设置了过期时间的数据,采用挑选将要过期的数据淘汰)
  • noeviction :永不过期(这个清理过程是阻塞的)

转自:https://www.cnblogs.com/chenpingzhao/p/5022467.html
https://chengyuanjian.github.io/redis/2016-10/redis-expired-strategy.html

相关文章

网友评论

      本文标题:redis过期策略

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