redis过期key删除策略

1 定时删除: 在设置键过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作;
这样做有一个弊端,就是当有很多key同一时间过期的时候,会造成一时间的CPU紧张,从而可能影响整体服务性能的吞吐量;
2 惰性删除: 放任键过期不管,但是每次从键空间获取键时,都检查取得的键是否过期,过期的话就删除该键,没过期的话就返回该键;
这样的弊端是会存在很多已经过期的占用着内存; 优点是 不会出现方案1 中的问题;
3 定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少个过期键,检查多少个数据库,由算法决定;
算是方案1 与 方案2 的折中办法,但是问题在于如何界定这个定期的频率;

Redis所用策略
惰性删除和定期删除相结合,但是Redis定期删除是随机抽取机制,不可能扫描删除掉所有的过期Key,因此需要内存淘汰机制.

内存淘汰机制
redis中当内存超过限制时,按照配置的策略,淘汰掉相应的key-value,使得内存可以继续留有足够的空间保存新的数据;

Redis有6种策略(默认no-enviction)

image.png

volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key ;
allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰;
volatile-random:随机淘汰数据,只淘汰设定了有效期的key;
allkeys-random:随机淘汰数据,所有的key都可以被淘汰;
volatile-ttl:淘汰剩余有效期最短的key;
no-enviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误 。
volatile-lfu : 淘汰最不频繁访问的数据,它是根据频率维度来选择将要淘汰的元素,即删除访问频率最低的元素。如果两个元素的访问频率相同,则淘汰最久没被访问的元素。只淘汰设定了有效期的key ;
allkeys-lfu : 使用LFU算法进行数据淘汰,所有的key都可以被淘汰;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞旅行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值