redis中有key但是删不掉_Redis删除过期key的策略

本文介绍了Redis中过期key的删除策略,包括定期删除和惰性删除。定期删除是每隔100ms随机抽取部分key检查并删除过期的,惰性删除是在查询过期key时才将其删除。仅靠这两种策略可能导致过期key堆积,可使用Redis内存淘汰机制解决,文中列举了多种内存淘汰策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在Redis中,假如我们设置了100w个key,这些key设置了只能存活2个小时,那么在2个小时后,redis是如何来删除这些key的?

答案:定期删除 and 惰性删除。

那什么是定期删除?什么的惰性删除?靠这两种策略就可以删除掉redis中过期的key吗?

定期删除:redis默认每隔100ms随机抽取一些key,检查是否有过期的key,有过期的key则删除。需要注意的是redis不是每隔100ms就将所有的key检查一次,而是随机抽取一些key来检查是否过期的key。如果每100ms,就将redis的所有key(假设有1000w的key)都检查一遍,那么会给CPU带来很大的负载,redis就会卡死了。因此,如果只采用定期删除策略,会导致很多key到时间还没有被删除。

惰性删除:定期删除策略可能会导致很多过期的key到了时间也还没有被删除掉;为了解决这个问题,redis增加了惰性删除策略;对于那些过期的key,靠定期删除策略没有被删除掉,还保留在内存中,这时候如果系统去主动查询这个key,redis判断已经过期了,才会把这个过期的key删除掉。

靠这两种策略就可以删除掉redis中过期的key吗?

仅仅靠通过设置过期时间还是存在着问题的。由于定期删除策略是随机抽取的,因此很有可能漏掉很多过期的key,这时候我们也没有主动去查询这些过期的key,因此也就没有使用惰性删除策略了,这时候如果有大量的过期key堆积,会导致内存被消耗完。要解决这个问题:可以使用redis 内存淘汰机制。

Redis 内存淘汰策略:

1、noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

2、allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。(这个比较常用)

3、allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。

4、volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。

5、volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。

6、volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值