原文出自:http://blog.csdn.net/zhghost/article/details/5344962,仅供学习
特别声明:该文章是 本人在网上搜索到的一些资料,稍作整理而成的,还望大家不要误会,具体出自于那本人也已经忘记。还请大家不要误会!!!
缓存算法:缓存法通过设计良好的数据分块、预取、顺序预取、缓存替换等算法来提高对缓存内容的命中率。缓存算法可以分为基于访问时间的策略、基于访问频率的策略、访问时间与频率兼顾策略、时间距离分布策略等类型。另有基于数据访问模式、基于VoD系统架构的策略等。
缓存策略:缓存策略主要三方面:①缓存什么内容;②何时进行缓存;③当缓存空间已满时如何进行替换,即缓存替换算法。
对于第二方面,大部分缓存算法使用预取策略来提前将部分磁盘数据放入缓存,以进一步减少磁盘I/O,加大缓存命中率。通过记录、分析以往的数据请求模式来预测将来可能被请求到的数据段,将访问可能性大的数据段放入缓存。
相比于其他应用,VoD视频点播存在很强的顺序数据访问模式:即在用户不进行VCR操作的情况下,对整个影片文件的各部分依次顺序访问,访问过的数据很少再次进行访问。此种数据访问模式是在设计VoD缓存算法时必须要考虑的。所以顺序预取方式适用于VoD系统。
缓存策略的数据块分割:
首部缓存和分块缓存策略普遍应用于VoD影片文件。首部缓存将影片文件开始的一部分放入缓存以减小点播用户的启动延迟,对于影片文件其他部分的访问需要直接读取磁盘。
分块缓存通过将影片文件切分成小块,以块为单位进行缓存操作。分块缓存分为定长分块与变长分块。定长分块将文件切分为大小相同的块,变长分块如文献[1],变长算法是基于影片文件越靠后的部分被访问的概率越低的推断,将文件按照首尾位置分块,各块大小按指数递增。
但以上定长与变长分块均忽略了两点:①影片文件会存在一些“热点片段”而这些热点片段并不均处于影片首部;②同一影片内“热点片段”的热度会随着时间不断改变,不同影片的热度也随时间不断变化。
需设计良好的算法自适应影片热点的不同位置与变化。
缓存策略的分类:
由于不同系统的数据访问模式不尽相同,同一种缓存策难以在各种数据访问模式下均取得满意性能,
研究人员提出不同缓存策略以适应不同需求。缓存策略可分为以下几类:
基于访问时间:此类算法按各缓存项的被访问时间来组织缓存队列,决定替换对象。如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更好的适应性。
基于访问模式的缓存策略:
文献[9]针对VoD系统的特点提出A&L算法。该算法通过记录每个缓存项的历史访问时间与访问数量来估计该项的未来被访问频率。以该频率值为度量,在进行缓存替换时替换掉该值最小的一项。由于该算法考虑了VoD系统的数据访问特点,所以广泛应用于VoD系统。
但A&L算法通过直接计算缓存区段生成以来的总的访问数量、频率来生成缓存权值,没有考虑VoD影片的访问热点会随时间不断变化。当某些缓存区段历史访问频率较高但最近访问频率下降时,仍保持较大权值,影响新的热点片段的缓存,无法适应影片热点的动态变化。
IBM提出的SARC[10]是针对于大型服务器的缓存算法,可在随机访问与顺序访问的数据访问模式下做出动态适应。SARC通过将随机访问与顺序访问分为两个队列分别管理来实现对两种不同访问模式的适应。并通过分析缓存大小-命中率的仿真试验数据曲线,得出对随机队列与顺序队列项分别进行替换的代价函数。当进行缓存替换时,通过两队列的代价函数来对代价小的队列进行替换。
分享到:
相关推荐
缓存的容量并非无限,因此当达到其最大容量时,必须采取一定的策略来决定哪些数据应该被移除以腾出空间,这涉及到缓存算法。 缓存算法主要包括以下几种: 1. **先进先出(FIFO)**:最古老的数据在缓存满时优先被...
面试官询问关于缓存算法及其作用时,面试者更是无法回答,显示出对缓存算法的基本概念和应用缺乏了解。 命中率是指访问缓存时成功获取数据的次数与总访问次数的比例。命中率越高,说明缓存效果越好,能够有效减少对...
缓存技术必须适应这种变化,提出了基于频率和时间平衡策略的算法、基于特殊应用的策略和基于探测的策略等单级缓存算法。 多级缓存的出现使得缓存结构更加复杂,需要特别考虑缓存层次结构带来的性能问题。多级缓存...
先进先出(First In First Out,简称FIFO)缓存算法是一种简单的缓存替换策略,它按照数据进入缓存的时间顺序进行管理,当缓存空间不足时,会移除最先进入缓存的数据,以便为新数据腾出空间。这种算法实现简单,但...
在Android应用开发中,图片加载和缓存是一个关键性能...以上就是关于"Android图片缓存算法的代码例子"的主要知识点,通过这些技术,我们可以有效地处理Android应用中的图片加载和缓存问题,提升应用的性能和用户体验。
其中,**替换算法**是应用最广泛的缓存策略之一。它决定何时以及如何将新数据放入缓存,同时移除旧数据。**LRU(Least Recently Used)**是最常用的替换算法,它优先替换最近最少使用的数据块。LRU算法在实际应用中...
目前,已有的经典缓存算法包括LFU(Least Frequently Used)、LRU(Least Recently Used)、LRfU和SC等。 LFU算法基于访问频率,计算资源在一段时间内的访问次数,预测下次是否可能访问。LFU的优势在于能较好地处理...
LFU(Least Frequently Used)算法是一种常用的页面替换策略或缓存淘汰策略,它的核心思想是:最近最少使用的数据在未来被访问的...因此,在选择缓存策略时,需要根据具体场景和需求权衡LFU和LRU以及其他策略的优劣。
综上,设计并行算法时,需要综合考虑问题特性、系统资源、通信开销和同步策略。在MPI环境下,利用其提供的工具和接口,可以构建高效、灵活的并行程序。了解并掌握这些设计策略和实践,对于解决大规模计算问题具有...
针对上述挑战,本文提出的Order Distance Cache Algorithm(ODCA)是一种结合LRU(Least Recently Used)和LFU(Least Frequently Used)算法优势的新型缓存策略。LRU基于时间局部性,优先替换最久未使用的数据;LFU...
最后,LRU(Least Recently Used)缓存算法是缓存替换策略的一种,它的核心思想是最少最近使用的文档优先被淘汰。当缓存空间有限且新数据到来时,LRU算法会优先移除最长时间未被访问的文档,以此来确保频繁访问的...
这篇文章深入探讨了基于Flash存储器的缓存换入换出策略的算法改进。首先,文章明确指出传统的操作系统大多基于传统的磁盘存储器进行设计,缓存换出算法主要以提高命中率为主要目标。然而,随着Flash存储器在移动...
然而,正确实现和管理HTTP缓存也需要注意避免数据一致性问题,以及合理设置缓存策略以防止过度依赖缓存,确保数据的及时性和准确性。 总结来说,HTTP缓存涉及了文档过期策略、服务器再验证机制和LRU缓存算法等关键...
在传统的缓存算法中,如LRU(Least Recently Used)和LFU(Least Frequently Used),数据的淘汰主要依据访问频率和时间顺序。然而,这些算法可能无法很好地适应时间局部性的特点,尤其是热点数据的快速迁移。DRCC算...
总的来说,基于软件的网络处理器中的路由高速缓存算法研究是一个涵盖计算机网络、数据处理和处理器架构的跨学科领域。通过深入研究和优化这些算法,我们可以构建更快速、更可靠、更能适应未来网络需求的网络处理器...
由于网络延迟的存在,合理的缓存策略显得尤为关键。在分布式缓存系统中,选择合适的缓存替换算法是提升整体性能的关键。 传统分布式缓存替换算法存在一定的局限性,特别是对于动态数据的处理能力不足。为了解决这个...