缓存替代策略

缓存替代策略


几个相关术语

  • 缓存命中:当客户发起一个请求时,如果该请求的数据是在缓存中,这一数据就会被使用,这一行为叫做缓存命中
  • 没有命中:cache miss就是没有命中,相对于缓存命中而言。如果缓存中还有存储空间,那么没有命中的对象会被存储到缓存中来。
  • 存储成本:当缓存没有命中时,系统会从数据库或其他数据源取出数据,然后放入缓存。而把这个数据放入缓存所需要的时间和空间,就是存储成本。
  • 缓存失效:当存储在缓存中的数据需要更新时,就意味着缓存中的这一数据失效了。
  • 替代策略:当缓存没有命中时,并且缓存容量已经满了,就需要在缓存中去除一条旧数据,然后加入一条新数据,而到底应该去除哪些数据,就是由替代策略决定的。
    替代策略的具体实现就是缓存算法,主流缓存算法有:
  1. Least-Recently-Used (LRU)
    替换掉最近被请求最少的对象,这种传统策略在实际中应用最广。在CPU缓存淘汰和虚拟内存系统中效果很好。然而在直接应用与代理缓存中效果欠佳,因为web访问的时间局部性常常变化很大。
    浏览器一般使用了LRU作为缓存算法。新的对象会被放在缓存的顶部,当缓存达到了容量极限,底部的对象被去除,方法就是把最新被访问的缓存对象放到缓存池的顶部。
  2. Least-Frenquently-Used (LFU)
    替换掉访问次数最少的缓存,这一策略意图是保留最常用的、最流行的对象,替换掉很少使用的对象。然而,有的文档可能有很高的使用频率,但之后再也不会用到。传统的LFU的策略没有提供任何移除这类文档的机制,因此会导致“缓存污染”,即一个先前流行的缓存对象会在缓存中驻留很长时间,这样,就阻碍了新进来可能会流行的对象对它的替换。
  3. Least Recently Used 2 (LRU2)
    是LRU-K的具体表现。LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。
    相比LRU,LRU-K需要多维护一个队列,用于记录所有数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间据当前时间最大的数据。
    数据第一次被访问时,加入到历史访问列表,如果书籍在访问历史列表中没有达到K次访问,则按照一定的规则(FIFO,LRU)淘汰;当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列中删除,将数据移到缓存队列中,并缓存数据,缓存队列重新按照时间排序;缓存数据队列中被再次访问后,重新排序,需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即“淘汰倒数K次访问离现在最久的数据”。
    LRU-K具有LRU的优点,同时还能避免LRU的缺点,实际应用中LRU-2是综合最优的选择。由于LRU-K还需要记录那些被访问过、但还没有放入缓存的对象,因此内存消耗会比LRU要多。
    此部分参考了CSDN博主「圣小童」的原创文章《LRU算法四种实现方式介绍
  4. Two Queues (2Q)
    是LRU的另一个变种,把被访问的数据放到LRU的缓存中,如果这个对象再一次被访问,就把他转移到第二个、更大的LRU缓存,使用了多级缓存的方式。去除缓存对象是为了保持第一个缓存是第二个缓存池的1/3。这个算法也是分两段的,和LRU2的区别就是,前者第一段也是缓存,使用LRU算法,后者第一段只是一个记录访问次数的队列。
  5. SIZE
    替换占用空间最大的对象,这一策略通过淘汰一个大对象而不是多个小对象来提高命中率。不过,可能有些进入缓存的小对象永远不会再被访问。SIZE策略没有提供淘汰这类对象的机制,也会导致“缓存污染”。
  6. LRU-Threshold
    不缓存超过某一size的对象,其他与LRU相同。
  7. Log(Size)+LRU
    替换size最大的对象,当size相同时,按LRU进行替换。
  8. Hyper-G
    LFU的改进版,同时考虑上次访问时间和对象size。
  9. Pitkow/Recker
    替换最近最少使用的对象,除非所有对象都是今天访问过的。如果是这样,则替换掉最大的对象。这一策略试图符合web网页的特定模式。这一策略也被建议在每天结束时运行,以释放被“旧的”、最近最少使用的对象占用的空间。
  10. Lowest-Latency-First
    替换下载时间最少的文档。显然它的目标是最小化平均延迟。
  11. Hybrid
    有一个目标是减少平均延迟。对缓存中的每一个文档都会计算一个保留效用,保留效用最低的对象会被替换掉。位于服务器s的文档f的效用函数定义如下:
    ( C s + K 1 / b s ) ∗ ( f r f ) K
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值