(四)、Redis删除策略---Redis设计与实现读书笔记

本文介绍了Redis过期键的三种删除策略。定时删除在键过期时立即删除,对内存友好但占用CPU;惰性删除在获取键时检查,对CPU友好但占用内存;定期删除周期性执行,通过限制时长和频率平衡两者影响,执行情况不同会退化为前两种策略。

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

过期键的删除策略

  • 定时删除:在设置键的过期时间时,同时创建一个定时器,让定时器在键过期时间来临时执行对键的删除操作【redis未使用该策略】
  • 惰性删除:当客户端从键空间中获取键时,通过db./expireIfNeeded函数检查键是否过期,过期则删除,否则返回该键
  • 定期删除:Redis服务器周期性操作redis.c/serverCron函数执行,会调用redis.c/activeExpireCycle函数,该函数会在规定时间内,分多次遍历服务器中各个数据库,从该数据库的expires字典中随机检查一部分键的过期时间。(通过全局变量current_db记录activeExpireCycle函数的检查进度,在下次调用该函数时通过该变量继续接着上一次的进度)

定时删除

  • 优点:对内存是友好的,通过定时器可以保证过期键尽可能快的被删除,并释放其占用空间。
  • 缺点:对CPU时间是不友好的,在内存不紧张但是CPU时间非常紧张的情况下,切换cpu执行定时器事件,会影响服务器的响应时间和吞吐量。

注意:创建定时器需要用到redis服务器中的时间事件,而时间事件是使用无序链表实现的,查找一个事件的时间复杂度为O(n)—不能高效处理大量时间事件

惰性删除

  • 优点:对CPU时间是友好的,程序只会在获取键时对键进行检查,删除过期键。
  • 缺点:对内存是不友好的,如果一个键过期,只要这个键没有被获取就会一直保存在数据库中,它所占内存就一直不会被释放。

定期删除

每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长频率来减少删除操作对CPU时间的影响。

  • 如果删除操作执行太频繁,或执行时间太长,定期删除策略就会退化为定时删除策略
  • 如果删除操作执行太少,或执行时间太短,定期删除策略就会退化为惰性删除策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值