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

程墨竹
2023-12-01

过期键的删除策略

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

定时删除

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

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

惰性删除

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

定期删除

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

  • 如果删除操作执行太频繁,或执行时间太长,定期删除策略就会退化为定时删除策略
  • 如果删除操作执行太少,或执行时间太短,定期删除策略就会退化为惰性删除策略
 类似资料: