Redis学习之十三 —— 过期策略

Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。

过期的 key 集合

redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定时遍历这个字典来删除过期的key。还有一种惰性策略删除过期的key,所谓惰性策略就是客户端访问这个 key 的时候,对 key 的过期时间进行检查,如果过期了立即删除。定时删除是集中删除惰性删除是零散处理。

定时扫描策略

Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。

1、从过期字典中随机 20 个 key;

2、删除这 20 个 key 中已经过期的 key;

3、如果过期的 key 比率超过 1/4 ,那就重复步骤 1;

为了保证过期扫描不会出现循环过度,导致线程卡死,增加了扫描时间的上限,默认不会超过 25ms。

大批量 key 过期带来的后果?

Redis 会持续扫描过期字段(循环多次),直到过期字典中过期的 key 变得稀疏,才会停止(循环次数明显下降)。这就会导致线上读写请求出现明显的卡顿现象。导致这种卡顿的另外一种原因是内存管理器需要频繁回收内存页,这也会产生一定的 CPU消耗。

扫描不是有 25ms 的时间上限么,为什么还会出现卡顿呢?

例如有101 个客户端同时将请求发送过来了,然后前 100 个请求的执行时间都是 25ms,那么第 101 个指令需要等待 2500ms,这就是客户端卡顿的时间,由服务器不间断的小卡顿积少成多导致的。

因此,如果有大批量的 key 过期,要给过期时间设置一个随机范围,而不能全部同一时间过期。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值