Redis如何删除过期的数据和Redis内存淘汰策略

一、在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优先移除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值