Redis的key过期策略是怎么实现的

文章探讨了Redis如何高效管理过期键,结合惰性删除(在使用时发现过期并删除)和定期删除(周期性筛查),强调了在单线程架构中定期删除时间设置的重要性,以及内存淘汰策略的补充作用。
摘要由CSDN通过智能技术生成

这是一道经典的Redis面试题,一个Redis中可能存在很多很多的key,这些key中可能有很大一部分都有过期时间,此时Redis服务器咋知道哪些key已经过期,哪些还没过期呢?

如果直接遍历所有的key,这显然是行不通的,效率非常低!!

Redis整体的策略是定期删除和惰性删除相结合。

举个栗子:假如我去小卖铺买东西,付款的时候,发现东西过期了。就告知老板,于是老板下架此产品。消费者发现过期了,才去下架,这就叫惰性删除。小卖铺老板主动定期抽取一部分商品,进行筛查,这就叫定期删除

一、惰性删除

假设这个key已经到了过期时间,但是暂时还没删它,key还存在。紧接着,后面的一次访问,正好用到了这个key,于是这次访问就会让Redis服务器触发删除key的操作,同时再返回一个nil。

二、定期删除

每次抽取一部分验证过期时间,保证这个抽取检查的过程,足够快。

为啥这里对于定期删除的时间,有明确的要求呢?因为Redis是单线程的程序,主要的任务就是处理每个命令的任务,如果扫描过期的时间过长,就可能导致正常处理请求命令就被阻塞了。

注意:虽然有了上述两种策略相结合,整体效果一般。仍然可能会有很多过期的key被残留了,没有被及时删除。Redis为了对上述进行补充,还提供了一系列的内存淘汰策略~

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis实现过期策略的方式有多种。 引用提到,当我们设置一个key过期时间时,Redis会将该键带上过期时间存放到一个过期字典中。当key过期后,如果没有触发Redis的删除策略过期后的数据依然会保存在内存中。这意味着,即使这个key已经过期,我们仍然能够获取到这个key的数据。 除了根据过期时间删除数据外,Redis还有其他的过期策略。具体有以下三种过期策略: 1. 定时删除:在设置key的同时,设置一个定时器,在过期时间到达时删除key。 2. 惰性删除:当某个客户端尝试获取一个已经过期key时,Redis会立即删除该key。 3. 定期删除:Redis会周期性地随机抽取一部分key,并检查其过期时间。如果过期,则删除。 需要注意的是,Redis并不是实时删除过期的数据,而是根据具体的策略来删除。这也是为了保证Redis的性能和效率。 因此,通过配置过期时间和选择合适的过期策略,可以实现Redis过期机制,防止数据累加后大量占用存储空间的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Redis--Redis数据过期策略详解](https://blog.csdn.net/weixin_44074051/article/details/127266404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【RedisRedis过期策略以及内存淘汰机制详解](https://blog.csdn.net/weixin_42201180/article/details/129150967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值