缓存淘汰算法之2Q

Posted 乡人碎语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存淘汰算法之2Q相关的知识,希望对你有一定的参考价值。

常见的缓存淘汰算法有LRU、LFU等,今天介绍一个简单的缓存算法2Q,常被用于数据库,特别是关系型数据库系统优化的缓存淘汰算法。ceph的bluestore也使用这种缓存淘汰算法。下面说说2Q的基本原理,2Q使用三个对列来管理缓存空间,分别称为Alin、Alout和Am。这三个对列都是LRU对列,其中Alin和Am是真正的缓存队列,Alout则是Alin的影子队列,Alout只保存相关页面的管理结构而不保存真实数据。假设访问了位置p,具体操作:

假如p在Am队列里:  将p移到Am的队首;  return;假如p在Alout队列里:  将p从Alout队列移除;  假如(len(Am)>C-Kin):  移除Am队尾的元素//意味着彻底淘汰  加入到Am队列;  return;不然: 如果缓存中有空间:  将p放到Alin队列;  return;  如果(len(Alin)>Kin): 移除Alin队尾的元素y,将y放到Alout队列  如果(len(Alout)>Kout):  移除Alout队尾元素 //意味着彻底淘汰 将p放到Alin队列 return;

其中Kin是预设的Alin队列的最大长度,Alout是Alout队列最大的长度,C是缓存的总长度。

以上是关于缓存淘汰算法之2Q的主要内容,如果未能解决你的问题,请参考以下文章

缓存淘汰算法之LRU

缓存淘汰算法之LRU实现

缓存淘汰算法

分布式技术专题「分布式缓存专题」针对于缓存淘汰算法之LRU和LFU及FIFO原理分析

分布式技术专题「系统功能原理分析」缓存淘汰算法之LRU和LFU及FIFO介绍

缓存淘汰策略之LRU