暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis的过期删除策略有哪些?优缺点

小璇坨坨 2019-07-03
937

我们都知道redis的过期时间都保存在过期字典里,如何根据过期时间去判断一个键是否过期,根据当前时间对比即可,那么问题来了,一个键过期了,它是如何删除的呢?换一句话说:删除过期数据的策略有哪些呢?


首先,redis给了三个答案,分别代表三种不同的删除策略:


  1. 定时删除:在设置键的过期时间时候,创建一个定时器timer,让定时器在键过期时间来临时,立刻执行键的删除操作。

  2. 惰性删除:放任过期时间不管,待有数据访问的时候,判断访问数据的过期时间,如果超时,删除即可,如果未超时,返回该键。

  3. 定期删除:每隔一段时间,程序对redis里的数据进行过期检查,删除里面的过期键。至于删除哪个key,删多少个key ,完全有算法决定。


接下来,将对三种过期策略的优劣进行说明


定时删除:


  • 优点:对内存是友好的,使用定时器,定时删除策略可以保证过期键会尽可能被删除,并释放过期键占用的内存。

  • 缺点:它对cpu不是很友好,在过期键较多的情况下,删除过期键这一行为可能会占用相当一部分cpu,在内存不紧张但是cpu非常紧张的情况下,将cpu时间片用在删除和当前任务无关的过期键上,无疑对服务器的响应时间和吞吐量造成影响。


因此,要让服务器创建大量的定时器,从而实现定时删除策略,从现阶段来说不太现实。


惰性删除


  • 优点:对cpu是友好的,只有程序过期检查时候,才会执行删除操作,从而不会在删除无关的过期键上花费任何cpu时间。

  • 缺点:对内存不是友好的,因为在大量数据被访问之前,已经有很多过期的数据,这些数据只要一时不被访问一时就不会被删除,未删除的过期数据当然是占用内存资源的,从而也不会释放资源。如果过期数据有很多,对应内存资源紧张的服务器来说,可谓是相当大的浪费。


定期删除:

定期删除策略是为了平衡以上两种策略的缺陷而设计的折中策略。


但定期策略的难点是确定删除操作的执行的时长和频率。


  • 如果删除操作的执行太频繁,或者执行的时间太长,定期删除策略就退化成定时删除策略,以至于将cpu时间过多的消耗在删除过期键上。

  • 如果删除操作执行的太少,或者执行的时间太短,定期删除就和惰性删除一样,浪费太多的内存空间资源。


因此,如果采用定期删除策略的话,服务器必须根据情况,合理的设置删除操作的执行时长和执行频率。



文章转载自小璇坨坨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论