十种常用的缓存替换算法
来源:互联网 发布:软件系统可靠性描述 编辑:程序博客网 时间:2024/05/17 06:25
- Least-Recently-Used(LRU) - 最近最少使用
替换掉最近被请求最少的文档。这一传统策略在实际中应用最广。在CPU缓存淘汰和虚拟内存系统中效果很好。然而直接应用与代理缓存效果欠佳,因为Web访问的时间局部性常常变化很大。 - Least-Frequently-Used(LFU) - 最不经常使用
替换掉访问次数最少的。这一策略意图保留最常用的、最流行的对象,替换掉很少使用的那些。然而,有的文档可能有很高的使用频率,但之后再也不会用到。传统的LFU策略没有提供任何移除这类文件的机制,因此会导致“缓存污染(Cache Pollution)”,即一个先前流行的缓存对象会在缓存中驻留很长时间,这样,就阻碍了新进来可能会流行的对象对它的替代。 - SIZE
替换size最大的对象。这一策略通过淘汰一个大对象而不是多个小对象来提高命中率。不过,可能有些进入缓存的小对象永远不会再被访问。SIZE策略没有提供淘汰这类对象的机制,也会导致“缓存污染”。 - LRU-Threshold
不缓存超过某一size的对象,其它与LRU相同。 - Log(Size) + LRU
替换size最大的对象,当size相同时,按LRU进行替换 - Hyper-G
LFU的改进版,同时考虑上次访问时间和对象size - Pitkow/Recker
替换最近最少使用的对象,除非所有对象都是今天访问过的。如果是这样,则替换掉最大的对象。这一策略试图符合每日访问web网页的特定模式。这一策略也被建议在每天结束是运行,以释放被“旧的”,最近最少使用的对象占用的空间。 - Lowest-Latency-First
替换下载时间最少的文档。显然它的目标是最小化平均延迟。 - Hybrid
Hybrid有另外一个目标,减少平均延迟。对缓存中的每个文档都会计算一个保留效用(utility of retaining)。保留效用最低的对象会被替换掉。位于服务器s的文档f的效用函数定义如下:
Cs: 与服务器s的连接时间
bs: 服务器s的带宽
frf: f的使用频率
sizef: f的size,单位字节
K1和K2是常量,Cs和bs是根据最近从服务器s获取文档的时间进行估计的。 - Lowest Relative Value(LRV)
LRV也是基于计算缓存中文档的保留效用。然后替换保留效用最低的文档。有点复杂,实际应用价值不大,就不详述了。
[ASAWF95, WASAF96]所做的性能研究表明在命中率方面,SIZE优于LFU, LRU-Threshold, Log(Size) + LRU, Hyper-G以及Pitkow/Recker。
[WASAF96]还显示大多数情况下,SIZE要优于LRU。然而,[LRV97]的研究表明在字节命中率方面LRU要优于SIZE。
大多数情况下,LRU都要比LFU好[Cao-Irani97]。在极少情况下,LFU表现比LRU好。
在最小化延迟方面,[WA97]表明Hybrid表现优于Lowest-Latency-First。
[LRV97]的性能研究表明,无论在命中率还是字节命中率方面,LRV表现都比LRU和SIZE好。
这缩小了我们的选择范围,似乎我们只需要考虑这些策略:LRU, SIZE, Hybrid, LRV。Hybrid和LRV涉及到大量的参数,理论价值大于实际应用。
[Cao-Irani97]所做的性能研究表明,Greedy-Dual-Size算法是目前最好的,在不同的维度都优于LRU, SIZE, Hybrid和LRV。
原文:http://www.hpl.hp.com/techreports/98/HPL-98-69R1.pdf?jumpid=reg_R1002_USEN
1 0
- 十种常用的缓存替换算法
- 程序员常用的十种算法
- LIRS缓存替换算法
- LIRS缓存替换算法
- LIRS缓存替换算法
- 匠人手记 十种常用的滤波算法
- LRU-K缓存替换算法
- java常用的十大算法
- 数学建模常用的十大算法
- 缓存的替换策略
- EhCache常用的memoryStoreEvictionPolicy(缓存算法)
- 常用缓存算法简介
- 常用缓存算法简介
- 常用缓存算法简介
- 常用缓存算法收集
- 算法基础——十种常用排序算法的Java及Python实现
- STL常用的拷贝替换算术集合算法
- KDnuggets 官方调查:数据科学家最常用的十种算法
- Android Android:persistentDrawingCache
- 2014年三大里程碑开启中国网络安全元年
- jdk与jre的区别
- ubuntu下minicom的安装,使用,常见问题的解决
- 依赖倒置原则(Dependence Inversion Principle)
- 十种常用的缓存替换算法
- c++复制构造函数
- yyets 2013.01到2014.05电影的ed2k
- javascript 阻止事件的默认行为
- Convert Sorted List to Binary Search Tree
- javascript操作html元素CSS属性
- 文章无法保存
- c# 生成微信公众帐号带参数二维码类
- linux 版本中 i386/i686/x86-64/pcc 等... 的区别