缓存淘汰算法之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和LFU及FIFO原理分析