十种常用的缓存替换算法

  1. Least-Recently-Used(LRU) - 最近最少使用

    替换掉最近被请求最少的文档。这一传统策略在实际中应用最广。在CPU缓存淘汰和虚拟内存系统中效果很好。然而直接应用与代理缓存效果欠佳,因为Web访问的时间局部性常常变化很大。

  2. Least-Frequently-Used(LFU) - 最不经常使用

    替换掉访问次数最少的。这一策略意图保留最常用的、最流行的对象,替换掉很少使用的那些。然而,有的文档可能有很高的使用频率,但之后再也不会用到。传统的LFU策略没有提供任何移除这类文件的机制,因此会导致“缓存污染(Cache Pollution)”,即一个先前流行的缓存对象会在缓存中驻留很长时间,这样,就阻碍了新进来可能会流行的对象对它的替代。

  3. SIZE

    替换size最大的对象。这一策略通过淘汰一个大对象而不是多个小对象来提高命中率。不过,可能有些进入缓存的小对象永远不会再被访问。SIZE策略没有提供淘汰这类对象的机制,也会导致“缓存污染”。

  4. LRU-Threshold

    不缓存超过某一size的对象,其它与LRU相同。

  5. Log(Size) + LRU

    替换size最大的对象,当size相同时,按LRU进行替换

  6. Hyper-G

    LFU的改进版,同时考虑上次访问时间和对象size

  7. Pitkow/Recker

    替换最近最少使用的对象,除非所有对象都是今天访问过的。如果是这样,则替换掉最大的对象。这一策略试图符合每日访问web网页的特定模式。这一策略也被建议在每天结束是运行,以释放被“旧的”,最近最少使用的对象占用的空间。

  8. Lowest-Latency-First

    替换下载时间最少的文档。显然它的目标是最小化平均延迟。

  9. Hybrid

    Hybrid有另外一个目标,减少平均延迟。对缓存中的每个文档都会计算一个保留效用(utility of retaining)。保留效用最低的对象会被替换掉。位于服务器s的文档f的效用函数定义如下:

    Cs: 与服务器s的连接时间

    bs: 服务器s的带宽

    frf: f的使用频率

    sizef: f的size,单位字节

    K1和K2是常量,Cs和bs是根据最近从服务器s获取文档的时间进行估计的。

  10. 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

十种常用的缓存替换算法

时间: 2024-10-07 02:31:41

十种常用的缓存替换算法的相关文章

介绍缓存的基本概念和常用的缓存技术(转)

摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题 1  概念 1.1   缓存能解决的问题 · 性能——将相应数据存储起来以避免数据的重复创建.处理和传输,可有效提高性能.比如将不改变的数据缓存起来,例如国家列表等,这样能明显提高web程序的反应速度: · 稳定性——同一个应用中,对同一数据.逻辑功能和用户界面的多次请求时经常发生的.当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的不稳定

必知干货:Web前端应用十种常用技术你全都知道吗?

Web前端应用十种常用技术,随着JS与XHTML的应用普及,越来越多的web界面应用技术出现在网站上,比如我们常见的日历控件,搜索下拉框等,这些web界面应用技术大大的丰富了网站的表现形式,本文将为您精心推荐十种最常见的web界面应用技术. Web应用程序的界面设计,其核心就是网页设计 ,但它的重点主要是在功能方面.要超越桌面应用程序, Web应用程序必须提供简单.直观和即时响应的用户界面,让他们的用户花更少的精力和时间去完成事情. 以前,我们并没有注意到web应用程序这个方式,但是现在是时候仔

Web前端十种常用的技术

Web前端应用十种常用技术,随着JS与XHTML的应用普及,越来越多的web界面应用技术出现在网站上,比如我们常见的日历控件,搜索下拉框等,这些web界面应用技术大大的丰富了网站的表现形式,本文将为您精心推荐十种最常见的web界面应用技术. Web应用程序的界面设计,其核心就是网页设计 ,但它的重点主要是在功能方面.要超越桌面应用程序, Web应用程序必须提供简单.直观和即时响应的用户界面,让他们的用户花更少的精力和时间去完成事情. 以前,我们并没有注意到web应用程序这个方式,但是现在是时候仔

c++STL之常用拷贝和替换算法

copy:容器中指定元素拷贝到另一容器中 replace:将容器内指定范围内的旧元素改为新元素 replace_if:容器内指定范围为满足条件的元素替换为新元素 swap:互换两个容器的元素 1.copy #include<iostream> using namespace std; #include <vector> #include <algorithm> //常用拷贝和替换算法 copy void myPrint(int val) { cout <<

PHP常用的缓存技术汇总

一.数据缓存 这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得. 用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表.举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈

电子商务网站比较常用的缓存策略架构

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问. 这次主要是分享下自己觉得比较通用的一个缓存策略的架构方案,也是比较 容易理解的.欢迎吐槽. 有更牛逼的也欢迎大家说下: 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问. 缓存的原理 (1)       将数据写入/读取速度更快的存储(设备): (2)       将数据缓存到离应用最近的位置: (3)       将数据缓存

常用的缓存技术

前言 缓存,在我们日常开发中是必不可少的一种解决性能问题的方法.简单的说,cache 就是为了提升系统性能而开辟的一块内存空间. 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的瓶颈出现.缓存的作用就是将这些来自不易的数据保存在内存中,当有其他线程或者客户端需要查询相同的数据资

Universal-Image-Loader源码分析,及常用的缓存策略

讲到图片请求,主要涉及到网络请求,内存缓存,硬盘缓存等原理和4大引用的问题,概括起来主要有以下几个内容: 原理示意图 主体有三个,分别是UI,缓存模块和数据源(网络).它们之间的关系如下: ① UI:请求数据,使用唯一的Key值索引Memory Cache中的Bitmap. ② 内存缓存:缓存搜索,如果能找到Key值对应的Bitmap,则返回数据.否则执行第三步. ③ 硬盘存储:使用唯一Key值对应的文件名,检索SDCard上的文件. ④ 如果有对应文件,使用BitmapFactory.deco

前端进阶之---常用常用再常用的缓存

在前端面试过程中,缓存几乎是必问的问题之一了,记得我有一次面试的时候,面试官让我说一下缓存的知识,我很自然就说出了localStorage,sessionStorage,cookie三者之间的不同点以及各自的特性,当我还在感觉自我回答很良好的时候,面试官就说关于缓存你在回去看看吧,这个回答并不合格.于是乎我就查了关于缓存的一些知识,以下就是关于缓存的一点见解. 以上就是关于前端缓存比较全的一张指示图,接下来讲几点: 1.http缓存命中顺序 http缓存都是从第二次请求开始的.第一次请求资源时,