redis 默认过期策略_redis过期策略

Redis 的过期策略包括被动删除和主动删除。被动删除在读/写过期key时执行,主动删除则定期检查并淘汰过期key。当内存超过maxmemory限制时,会根据配置策略淘汰key。Redis 2.6默认每100ms运行serverCron,而3.0.0版本默认每秒执行10次后台任务。主动删除策略包括LRU、随机删除等不同方式。
摘要由CSDN通过智能技术生成

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次如下步骤:

随机测试设置了100个过期时间的key

删除所有已发现的过期的key

若删除的key超过25则重复步骤1

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

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

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

这种过期策略对cpu是友好的,删除操作只有在调用该key的时候才会进行,不会在其他的expire key上浪费无谓的CPU时间。

但是这种策略对内存是不友好的,一个key已经过期,但是他在操作之前不会被删除的,仍然占据内存空间。

主动删除

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

maxmemory

当前已用内存超过maxmemory限定时,会触发主动清除策略

volatile-lru : 只对设置了过期时间的key进行LRU (默认值) (对已经设置了过期时间的数据结构,挑选最少使用的数据淘汰)

allkeys-lru: 删除LRU算法的key(从全部的数据结构,挑选最少使用的数据淘汰)

volatile-random : 随机删除即将过期的key(对已经设置了过期时间的数据,采用随机删除的数据淘汰)

allkeys-random : 随机删除(对所有的数据,采用随机删除的数据淘汰)

volatile-ttl :删除即将过期的(只对设置了过期时间的数据,采用挑选将要过期的数据淘汰)

noeviction :永不过期(这个清理过程是阻塞的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值