缓存超时删除常见的套路

我们使用缓存的时候,经常会涉及到一个东西,叫做过期时间。那么,缓存本身是如何去处理这个超时时间的呢?

常见的缓存定时超时套路有三种。

一、定时删除:

实现:在设置键的过期时间的同时,创建一个定时器(timer),让这个定时器在过期的时候触发,执行删除这个键。

优点:对内存是友好的,因为我们总能够尽快的将这个键值对从内存中踢出去。

缺点:对CPU是不友好的,特别是当定时器过多的时候,CPU会过度紧张。并且,我们也需要去维护一个合理地数据结构存储这些定时器。这往往会影响到服务器的存储与吞吐。

二、懒惰删除:

实现:程序在操作某个键的时候,会对它进行过期检查,如果过期,则将它从内存中删除。

优点:对CPU是友好的,因为只有在有操作的时候才会占用一丁点的CPU资源。

缺点:对内存是不友好的,如果这些过期的键会一直留在内存,直到被访问,如果他们一直没被访问,则永远留在内存里面。(除非重启或者Clear缓存)。这往往会造成内存浪费,甚至是内存泄露。

三、定期删除:

实现:每隔一段时间,按照一定的算法,执行一次过期键的删除操作。通常我们会限定执行的时长。

优点:相比定时删除、懒惰删除这种“极端策略”,定期删除是比较中庸的一种解决方案,更加稳定。

难点:删除的算法、删除的频率的设定是需要仔细斟酌的。如果执行的频率太高,或者执行时间太长,定期删除就会退化成定时策略,造成CPU的浪费。如果执行的频率太少,或者执行的时间太短,又会退化成惰性删除。造成内存的浪费。

所以如果采用定期删除的效率,必须根据服务器情况,根据数据的特性,合理地选择定期删除算法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值