`
m635674608
  • 浏览: 5042918 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

常见缓存算法和缓存策略

 
阅读更多

缓存算法缓存法通过设计良好的数据分块、预取、顺序预取、缓存替换等算法来提高对缓存内容的命中率。缓存算法可以分为基于访问时间的策略、基于访问频率的策略、访问时间与频率兼顾策略、时间距离分布策略等类型。

缓存策略:缓存策略主要三方面:

  • 缓存什么内容
  • 何时进行缓存
  • 当缓存空间已满时如何进行替换,即缓存替换算法。

对于第二方面,大部分缓存算法使用预取策略来提前将部分磁盘数据放入缓存,以进一步减少磁盘I/O,加大缓存命中率。通过记录、分析以往的数据请求模式来预测将来可能被请求到的数据段,将访问可能性大的数据段放入缓存。

缓存策略的数据块分割:

首部缓存和分块缓存策略普遍应用于VoD影片文件。首部缓存将影片文件开始的一部分放入缓存以减小点播用户的启动延迟,对于影片文件其他部分的访问需要直接读取磁盘。

分块缓存通过将影片文件切分成小块,以块为单位进行缓存操作。分块缓存分为定长分块与变长分块。定长分块将文件切分为大小相同的块,变长分块,变长算法是基于影片文件越靠后的部分被访问的概率越低的推断,将文件按照首尾位置分块,各块大小按指数递增。

但以上定长与变长分块均忽略了两点:

  • 影片文件会存在一些“热点片段”而这些热点片段并不均处于影片首部
  • 同一影片内“热点片段”的热度会随着时间不断改变,不同影片的热度也随时间不断变化。

需设计良好的算法自适应影片热点的不同位置与变化。

缓存策略的分类:

由于不同系统的数据访问模式不尽相同,同一种缓存策难以在各种数据访问模式下均取得满意性能,研究人员提出不同缓存策略以适应不同需求。

缓存策略可分为以下几类:

  • 基于访问时间:此类算法按各缓存项的被访问时间来组织缓存队列,决定替换对象。如LRU。
  • 基于访问频率:此类算法用缓存项的被访问频率来组织缓存。如LFU、LRU-2、2Q、LIRS。
  • 访问时间与频率兼顾:通过兼顾访问时间与频率,使得在数据访问模式变化时缓存策略仍有较好性能。如FBR、LRFU、ALRFU。多数此类算法具有一个可调或自适应参数,通过该参数的调节使缓存策略在基于访问时间与频率间取得一定平衡。
  • 基于访问模式:某些应用有较明确的的数据访问特点,进而产生与其相适应的缓存策略。如专为VoD系统设计的A&L缓存策略,同时适应随机、顺序两种访问模式的SARC策略。
  • 基于访问时间的缓存策略:LRU (LeastRecentlyUsed)是一种应用广泛的缓存算法。该算法维护一个缓存项队列,队列中的缓存项按每项的最后被访问时间排序。当缓存空间已满时,将处于队尾,即删除最后一次被访问时间距现在最久的项,将新的区段放入队列首部。但LRU算法仅维护了缓存块的访问时间信息,没有考虑被访问频率等因素,在某些访问模式下无法获得理想命中率。例如对于VoD系统,在没有VCR操作的情况下,数据被由前至后顺序访问,已访问过的数据不会被再次访问。所以LRU算法将最新被访问的数据最后被替换不适用于VoD系统。
  • 基于访问频率的缓存策略:LFU (LeastFrequentlyUsed)按每个缓存块的被访问频率将缓存中的各块排序,当缓存空间已满时,替换掉缓存队列中访问频率最低的一项。与LRU的缺点类似, LFU仅维护各项的被访问频率信息,对于某缓存项,如果该项在过去有着极高的访问频率而最近访问频率较低,当缓存空间已满时该项很难被从缓存中替换出来,进而导致命中率下降。
    LRU-2[2, 3]算法记录下每个缓存页面最后两次被访问的时间。替换页面时替换掉倒数第二次访问时间距现在最久的一项。在IRM (IndependentReferenceModel)访问模式下,LRU-2有着最好的预期命中率,由于LRU-2算法要维护一个优先级队列,所以该算法复杂度为logN(N为缓存队列中缓存项的数量)。
    2Q[4](2 Queues)使用LRU队列替换了LRU-2中的优先级队列,将算法时间复杂度由logN降为常数,且维护缓存项的各信息所需空间比LRU-2小。
    LIRS[5](Low Inter-ReferenceRecency Set)维护一个变长的LRU队列,该队列的LRU端为最近至少被访问过2次的第Llirs项(Llirs为算法参数)。LIRS算法在IRM访问模式下可以获得很高的命中率,但对于SDD访问模式效率明显下降。
    对于VoD系统,基于访问频率的策略可以捕捉到热点影片片段,使得对热点片段的大量请求免于进行缓慢的磁盘I/O。但影片热点会随时间不断变化,且此类策略无法利用VoD的顺序访问模式,所以纯粹以访问频率为度量来进行替换操作不适合VoD系统。
  • 兼顾访问时间与频率:FBR[6](Frequency Based Replacement)维护一个LRU队列,并将该队列分为New、Middle、Old三段。对队列中的每一缓存项均维护一个计数值。当缓存中的一项被命中时,被命中的缓存项被移至New段的MRU端,如果该项原本位于Old或Middle段,则其计数值加1,原位于New段则计数值不变。当进行替换操作时,删除Old段计数值最小的一项(LRU端)。
    LRFU[7](LeastRecently FrequentlyUsed)为每一个缓存项维护一个权值C(x),其初始值为0, C(x)按以下公式变化。
    在t时刻, C(x) =1+2-λC(x): x被访问到2-λC(x) : x未被访问进行替换操作时,C(x)值最小的一项被删除。当时, LRFU算法行为类似于LFU;而当时,该算法行为逼近LRU算法。该算法通过选用合适的λ值来获得时间与频率因素的平衡。
    LRFU虽然通过一个值来兼顾访问时间与频率因素,但由于值固定,当访问模式变化时,该算法无法做出相应的调整而造成性能下降。ALRFU[8](Adaptive LRFU)在此方面对LRFU进行了改进。通过对数据访问模式的历史进行监控,ALRFU动态调整值来适应数据访问模式的改变,表现出比LRFU更好的适应性。
  • 基于访问模式的缓存策略:针对VoD系统的特点提出A&L算法。该算法通过记录每个缓存项的历史访问时间与访问数量来估计该项的未来被访问频率。以该频率值为度量,在进行缓存替换时替换掉该值最小的一项。由于该算法考虑了VoD系统的数据访问特点,所以广泛应用于VoD系统。
    但A&L算法通过直接计算缓存区段生成以来的总的访问数量、频率来生成缓存权值,没有考虑VoD影片的访问热点会随时间不断变化。当某些缓存区段历史访问频率较高但最近访问频率下降时,仍保持较大权值,影响新的热点片段的缓存,无法适应影片热点的动态变化。
    IBM提出的SARC[10]是针对于大型服务器的缓存算法,可在随机访问与顺序访问的数据访问模式下做出动态适应。SARC通过将随机访问与顺序访问分为两个队列分别管理来实现对两种不同访问模式的适应。并通过分析缓存大小-命中率的仿真试验数据曲线,得出对随机队列与顺序队列项分别进行替换的代价函数。当进行缓存替换时,通过两队列的代价函数来对代价小的队列进行替换

http://blog.csdn.net/it_yuan/article/details/8489125

分享到:
评论

相关推荐

    缓存、缓存算法和缓存框架简介.docx

    缓存的容量并非无限,因此当达到其最大容量时,必须采取一定的策略来决定哪些数据应该被移除以腾出空间,这涉及到缓存算法。 缓存算法主要包括以下几种: 1. **先进先出(FIFO)**:最古老的数据在缓存满时优先被...

    缓存、缓存算法和缓存框架简介 - 文章 - 伯乐在线.pdf

    面试官询问关于缓存算法及其作用时,面试者更是无法回答,显示出对缓存算法的基本概念和应用缺乏了解。 命中率是指访问缓存时成功获取数据的次数与总访问次数的比例。命中率越高,说明缓存效果越好,能够有效减少对...

    c++实现的常见缓存算法和LRU

    那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。 常见的缓存算法 LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。 LFU (Least frequently used) 最不...

    基于软件的网络处理器的路由高速缓存算法研究.pdf

    例如,通过模拟测试,可以评估不同缓存大小、填充策略和网络流量模型对整体性能的影响。此外,专业指导通常会强调在实际部署时要考虑的硬件限制和网络动态变化。 总的来说,基于软件的网络处理器中的路由高速缓存...

    HTTP缓存算法研究与实现.docx

    最后,LRU(Least Recently Used)缓存算法是缓存替换策略的一种,它的核心思想是最少最近使用的文档优先被淘汰。当缓存空间有限且新数据到来时,LRU算法会优先移除最长时间未被访问的文档,以此来确保频繁访问的...

    常见程序的算法

    9. 哈希算法:哈希表提供了快速的查找、插入和删除操作,广泛应用于数据库索引、缓存系统和唯一标识生成。 这些算法不仅在理论上有重要价值,也是实际编程中不可或缺的工具。理解并掌握这些算法,能够提升解决问题...

    面试常见基础算法题总结

    7. **排序算法**:快速排序、归并排序和堆排序是常见的排序算法。快速排序在平均情况下效率高,但最坏情况为O(n^2),可以通过随机化选取枢轴优化。归并排序稳定但需要额外空间,堆排序不稳定但原地排序。 8. **快排...

    服务器端流媒体流行性的缓存策略研究.rar

    服务器端的流媒体缓存策略是优化服务质量、降低网络带宽消耗和提高用户体验的关键环节。本文将深入探讨服务器端流媒体流行性缓存策略的研究,旨在揭示如何有效地管理和利用缓存资源,以满足大规模用户的并发需求。 ...

    android中图片的三级缓存cache策略(内存/文件/网络)

    缓存策略通常包括LRU(Least Recently Used)最近最少使用算法,这是一种常见的缓存淘汰策略,当缓存满时,最近最少使用的数据会被优先移除,以腾出空间给新的数据。在Android中,可以使用`LruCache`类来实现LRU...

    cache缓存淘汰算法--LRU算法.docx

    Multi Queue (MQ) 算法则进一步优化了缓存策略,它将数据根据访问频率划分到多个 LRU 队列中,每个队列有不同的优先级。数据访问次数越多,其所在的队列优先级越高。MQ 算法能够更精细地处理不同访问频率的数据,...

    排序算法汇编(常见排序算法的集合)

    为了更好地理解和应用这些算法,本文将详细探讨常见的内部排序方法,并对其进行分类和分析。 首先,根据排序过程中资料所在媒介物的区分,可以将排序算法分为内部排序(Internal Sort)和外部排序(External Sort)...

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

    常见的高速缓存调度算法有以下几种: 1. 先进先出(FIFO, First In First Out):最简单的替换策略,按照数据进入缓存的顺序依次替换。 2. 最近最少使用(LRU, Least Recently Used):淘汰最近最少使用的数据,...

    PHP常见缓存技术分析(cache)

    根据具体项目需求,开发者还可以自定义缓存策略,如基于LRU(Least Recently Used)算法的缓存替换策略,或者利用数据库的内置缓存功能。 总结,PHP的缓存技术涵盖了从低级的opcode缓存到高级的分布式内存存储解决...

    实现 LRU 算法,和 Caffeine 和 Redis 中的缓存淘汰策略.docx

    LRU (Least Recently Used) 算法是一种常用的缓存淘汰策略,它的核心思想是优先淘汰最近最少使用的数据。在计算机系统中,由于内存资源有限,当缓存内容达到最大容量时,必须采取一定的策略来决定哪些数据应该被移除...

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

    "链表数据结构与LRU缓存淘汰算法" 链表是一种基础的数据结构,它广泛应用于软件开发和硬件设计中...我们可以使用链表来实现LRU缓存淘汰算法,链表提供了快速的插入、删除和查找操作,并且可以满足缓存的大小限制要求。

    squidrefresh算法

    通过合理运用缓存替换算法和更新策略,可以有效地管理和优化缓存资源,实现网络资源的最大化利用。SquidRefresh算法作为Squid代理缓存服务器中的一项关键技术,对于提升缓存系统的整体性能具有重要意义。未来随着...

    基于概念漂移学习的ICN自适应缓存策略.pdf

    《基于概念漂移学习的ICN自适应缓存策略》一文主要探讨了如何通过学习和适应性策略提升信息中心网络(Information-Centric Networking, ICN)中的缓存性能。文章作者提出了一个新颖的方法,利用概念漂移学习...

    缓存_策略表(整理doc文档)

    缓存策略是关于如何管理缓存内容的一系列规则和算法,它们决定了哪些数据应被缓存,以及何时更新或删除这些数据。常见的缓存策略包括: 1. LRU(Least Recently Used):最近最少使用。当缓存满时,优先淘汰最近...

    MRU 一种cache的算法

    **MRU 缓存算法详解** MRU (Most Recently Used) 是一种常见的缓存替换策略,广泛应用于计算机系统中,特别是在内存管理和数据缓存优化方面。它的核心思想是:最近被访问过的数据最有可能在不久的将来再次被访问。...

Global site tag (gtag.js) - Google Analytics