`
uule
  • 浏览: 6359227 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

缓存淘汰算法系列之2 --- LFU

 
阅读更多

 

 

1.1. LFU

1.1.1. 原理

LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。

1.1.2. 实现

LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。

具体实现如下:

 

1. 新加入数据插入到队列尾部(因为引用计数为1);

2. 队列中的数据被访问后,引用计数增加,队列重新排序;

3. 当需要淘汰数据时,将已经排序的列表最后的数据块删除。

1.1.3. 分析

l 命中率

一般情况下,LFU效率要优于LRU,且能够避免周期性或者偶发性的操作导致缓存命中率下降的问题。但LFU需要记录数据的历史访问记录,一旦数据访问模式改变,LFU需要更长时间来适用新的访问模式,即:LFU存在历史数据影响将来数据的“缓存污染”效用。

l 复杂度

需要维护一个队列记录所有数据的访问记录,每个数据都需要维护引用计数。

l 代价

需要记录所有数据的访问记录,内存消耗较高;需要基于引用计数排序,性能消耗较高。

 

 

1.2. LFU*

1.2.1. 原理

基于LFU的改进算法,其核心思想是“只淘汰访问过一次的数据”。

1.2.2. 实现

LFU*数据缓存实现和LFU一样,不同的地方在于淘汰数据时,LFU*只淘汰引用计数为1的数据,且如果所有引用计数为1的数据大小之和都没有新加入的数据那么大,则不淘汰数据,新的数据也不缓存

1.2.3. 分析

l 命中率

和LFU类似,但由于其不淘汰引用计数大于1的数据,则一旦访问模式改变,LFU*无法缓存新的数据,因此这个算法的应用场景比较有限。

l 复杂度

需要维护一个队列,记录引用计数为1的数据。

l 代价

相比LFU要低很多,不需要维护所有数据的历史访问记录,只需要维护引用次数为1的数据,也不需要排序。

 

1.3. LFU-Aging

1.3.1. 原理

基于LFU的改进算法,其核心思想是“除了访问次数外,还要考虑访问时间”。这样做的主要原因是解决LFU缓存污染的问题。

1.3.2. 实现

虽然LFU-Aging考虑时间因素,但其算法并不直接记录数据的访问时间,而是通过平均引用计数来标识时间。

LFU-Aging在LFU的基础上,增加了一个最大平均引用计数。当当前缓存中的数据“引用计数平均值”达到或者超过“最大平均引用计数”时,则将所有数据的引用计数都减少。减少的方法有多种,可以直接减为原来的一半,也可以减去固定的值等。

1.3.3. 分析

l 命中率

LFU-Aging的效率和LFU类似,当访问模式改变时,LFU-Aging能够更快的适用新的数据访问模式,效率要高。

l 复杂度

在LFU的基础上增加平均引用次数判断和处理。

l 代价

和LFU类似,当平均引用次数超过指定阈值(Aging)后,需要遍历访问列表。

 

1.4. LFU*-Aging

1.4.1. 原理

LFU*和LFU-Aging的合成体。

1.4.2. 实现

略。

1.4.3. 分析

l 命中率

和LFU-Aging类似。

l 复杂度

比LFU-Aging简单一些,不需要基于引用计数排序。

l 代价

比LFU-Aging少一些,不需要基于引用计数排序。


1.5. Window-LFU

1.5.1. 原理

Windows-LFU是LFU的一个改进版,差别在于Window-LFU并不记录所有数据的访问历史,而只是记录过去一段时间内的访问历史,这就是Window的由来,基于这个原因,传统的LFU又被称为“Perfect-LFU”。

1.5.2. 实现

与LFU的实现基本相同,差别在于不需要记录所有数据的历史访问数据,而只记录过去一段时间内的访问历史。具体实现如下:

 

1)记录了过去W个访问记录;

2)需要淘汰时,将W个访问记录按照LFU规则排序淘汰

 

举例如下:

假设历史访问记录长度设为9,缓存大小为3,图中不同颜色代表针对不同数据块的访问,同一颜色代表针对同一数据的多次访问。

样例1:黄色访问3次,蓝色和橘色都是两次,橘色更新,因此缓存黄色、橘色、蓝色三个数据块

样例2:绿色访问3次,蓝色两次,暗红两次,蓝色更新,因此缓存绿色、蓝色、暗红三个数据块

 

1.5.3. 分析

l 命中率

Window-LFU的命中率和LFU类似,但Window-LFU会根据数据的访问模式而变化,能够更快的适应新的数据访问模式,”缓存污染“问题不严重。

l 复杂度

需要维护一个队列,记录数据的访问流历史;需要排序。

l 代价

Window-LFU只记录一部分的访问历史记录,不需要记录所有的数据访问历史,因此内存消耗和排序消耗都比LFU要低。

1.6. LFU类算法对比

由于不同的访问模型导致命中率变化较大,此处对比仅基于理论定性分析,不做定量分析。

对比点

对比

命中率

Window-LFU/LFU-Aging > LFU*-Aging > LFU > LFU*

复杂度

LFU-Aging > LFU>  LFU*-Aging  >Window-LFU > LFU*

代价

LFU-Aging > LFU > Window-LFU > LFU*-Aging  > LFU*

 

 

来源:http://blog.csdn.net/yunhua_lee/article/details/7648549

分享到:
评论

相关推荐

    常用的缓存淘汰算法.pdf

    LFU缓存淘汰算法的优点是简单易于实现,且可以与其他缓存淘汰算法结合使用。但是,LFU缓存淘汰算法也存在一些缺点,例如无法对具有高访问率的条目进行缓存,且无法对长时间没有被访问的条目进行缓存。 2. 最近最少...

    LFU算法LFU算法LFU算法LFU算法

    LFU(Least Frequently Used)算法是一种常用的页面替换策略或缓存淘汰策略,它的核心思想是:最近最少使用的数据在未来被访问的概率较低,因此应该优先淘汰这些数据。在LFU算法中,不仅考虑了数据的使用频率,还...

    06丨链表(上):如何实现LRU缓存淘汰算法?1

    "链表数据结构与LRU缓存淘汰算法" 链表是一种基础的数据结构,它广泛应用于软件开发和硬件设计中。今天我们将讨论如何使用链表来实现LRU缓存淘汰算法。 首先,让我们来讨论缓存的概念。缓存是一种提高数据读取性能...

    05.高级计算机系统结构_高速缓存.ppt

    常见的淘汰算法有先进先出算法、随机淘汰、LRU 算法和 LFU 算法等。 高速缓存的实现 -------------- 高速缓存的实现需要考虑多个因素,包括高速缓存的大小、结构、淘汰算法等。正确的高速缓存实现可以大大提高系统...

    06丨链表(上):如何实现LRU缓存淘汰算法?.pdf

    链表(上):如何实现 LRU 缓存淘汰算法? 链表是一种基础的数据结构,学习链表有什么用呢?为了回答这个问题,我们来讨论一个经典的链表应用场景,那就是 LRU 缓存淘汰算法。缓存是一种提高数据读取性能的技术,在...

    缓存替换算法研究综述

    传统的缓存替换算法,如最近最少使用(LRU)、最近被使用(MRU)和最少访问频率(LFU),虽然实现简单,但在处理复杂的访问模式时存在局限性,尤其在应对具有高度局部性的数据访问模式和顺序访问扫描模式时,它们的...

    GPU功耗管理(缓存置换算法)-需求.docx

    通过对比该算法与LFU(最不经常使用)、LRU(最近最少使用)和FIFO(先进先出)等传统缓存置换策略的功耗和性能,可以得出关于新算法有效性的结论。 总结来说,GPU功耗管理中的缓存置换算法设计是一个关键环节,...

    行业分类-设备装置-为缓存一致性处理缓存回写和缓存淘汰.zip

    常见的缓存淘汰策略有LRU(最近最少使用)、LFU(最不经常使用)和随机淘汰等。LRU策略会淘汰最长时间未被使用的数据块,因为它假设这些数据未来被访问的可能性最小;LFU则是淘汰使用频率最低的数据,认为这些数据不...

    利用高速缓存调度算法实现通讯信息的缓冲

    在IT领域,高速缓存调度算法是优化系统性能的关键技术之一,特别是在处理大量通信信息时。本项目通过VB6(Visual Basic 6)编程环境,结合Access2003数据库,实现了利用高速缓存调度算法对通讯信息进行缓冲,以提高...

    缓存机制与数据一致性.pptx

    通过合理选择缓存类型、设计有效的缓存失效策略以及优化缓存淘汰算法,可以在保证数据一致性的同时提高系统的整体性能。此外,在分布式环境中,还需要考虑CAP定理等理论指导下的设计原则,以实现更高级别的数据一致...

    基于云计算的分布式缓存.pptx

    - 使用合适的缓存淘汰策略,比如LRU或LFU算法。 - 对热点数据进行特殊处理,比如增加备份或使用更高性能的存储介质。 #### 四、分布式缓存的安全性考虑 - 在分布式缓存系统中,安全性是非常重要的考虑因素之一。...

    基于深度学习的视频缓存算法.pdf

    LFU算法侧重于根据资源被访问的频率来淘汰缓存,而LRU则以资源最后一次被访问的时间为依据。这两种算法在不同的应用场景下各有优劣。 LFU算法的优势在于它能够较准确地预测短期内热门资源的访问模式,但对长期稳定...

    LFU.zip_LFU_The Program

    LFU(Least Frequently Used)是一种常见的页面替换算法,广泛应用于计算机网络中的缓存管理和内存管理。这个程序"LFU.zip_LFU_The Program"显然旨在实现LFU算法,帮助用户在有限的资源中优化数据访问效率。 **LFU...

    LFU.zip_LFU

    LFU(Least Frequently Used,最不经常使用)算法是一种常用的页面替换策略,广泛应用于缓存系统和内存管理中。在操作系统中,当物理内存不足以容纳所有活动进程的虚拟内存时,就需要通过页面替换机制将部分内存中的...

    操作系统页面置换算法实现,fifo、lfu、lru、opt,界面由MFC实现

    3. LFU(最不常用)算法:LFU试图淘汰那些在过去一段时间内使用频率最低的页面。它的核心思想是频繁使用的页面在未来更可能继续被频繁使用。LFU在处理短期和长期热门页面方面通常优于LRU,但在处理某些特定工作负载...

    行业-15 当Buffer Pool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓存.rar

    总的来说,LRU算法在数据库缓存管理中起到了关键作用,通过高效地淘汰不常用的数据,确保Buffer Pool能够有效地服务于频繁的查询操作,从而提升整体系统性能。在实际应用中,还需要结合具体数据库的特性和工作负载...

    springMVC+Ehcache的各级缓存(包括页面缓存)

    - 容量驱动:当缓存达到预设大小时,采用LRU(Least Recently Used)或LFU(Least Frequently Used)等算法进行淘汰。 7. 调优与监控: - 监控缓存性能,观察缓存命中率、缓存大小、存取时间等指标,调整缓存策略...

    缓存对大数据分析的优化.pptx

    2. **缓存淘汰策略优化**: - 采用最近最少使用(LRU)算法或最不常用(LFU)算法等策略。 - 这些算法可以帮助自动淘汰不活跃的数据项,释放空间给新数据。 - 可以根据具体应用场景选择最适合的算法。 3. **缓存数据...

    大促抗住零点洪峰-缓存架构体系课件

    常见的缓存淘汰算法包括: 1. **FIFO(先进先出)**:按照数据进入缓存的顺序进行淘汰。 2. **LRU(最近最少使用)**:优先淘汰最近最少被访问的数据。 3. **LFU(最少使用)**:根据一段时间内数据被访问的频率...

Global site tag (gtag.js) - Google Analytics