圖解緩存淘汰算法二之LFU

1.概念分析

       LFU(Least Frequently Used)即最近最不經常使用.從名字上來分析,這是一個基於訪問頻率的算法.與LRU不一樣,LRU是基於時間的,會將時間上最不常訪問的數據淘汰;LFU爲將頻率上最不常訪問的數據淘汰.既然是基於頻率的,就須要有存儲每一個數據訪問的次數.從存儲空間上,較LRU會多出一些持有計數的空間.java

      那麼LFU算法的主導思想是什麼呢?LFU算法認爲"若是數據過去訪問頻率很高,那麼未來被訪問的頻率也很高".好吧,我知道這又是個僞命題,不過全部的可實現的淘汰算法,都是基於對過去數據認識來推斷將來的發展,這跟天氣預報是一個思路(固然,天氣預報要複雜的多).未來的事情哪能說的準,根據過去的狀況來推斷未來.好了,不羅嗦了.算法

2.原理分析

 

 下面簡單講解一下:緩存

  1. 當緩存池已經滿了,此時訪問D,D的訪問頻率爲26;
  2. 訪問D後,D的頻率+1,此時須要調整緩存池數據須要從新排序,D和C交換;
  3. 訪問B,B的頻率+1,因爲A的頻率仍然比B大,因此不須要調整;
  4. 新數據F插入緩存池以前,因爲E的頻率最低,故淘汰E,將F插入緩存池,緩存池從新排序,F放到隊尾.

固然,這只是一個簡單的模型圖,實現方式不少,也能夠不須要緩存池從新排序.數據結構

3.優略分析

 【命中率性能

命中率比LRU較高,可以避免週期性或偶發性的狀況對LRU的命中影響,可是,一旦訪問內容發生較大變化,LFU須要用更長的時間來適應(歷史的頻率記錄會是這些污染數據保持較長的一段時間)spa

 【複雜度.net

須要維護全部的訪問記錄的頻率數據結構,實現較LRU複雜.blog

 【存儲成本排序

須要維護全部的訪問記錄的頻率數據結構.內存

 【缺陷

僅僅從最近訪問頻率上考慮淘汰算法,可能會淘汰一些仍有價值的單元.內存和性能消耗較高.

4.實現

暫時略,之後會採用僞代碼和java語言的方式作簡單的實現.

最後,若有哪裏不正確的地方,請多多指教. 後續會將其餘緩存淘汰算法一一介紹,敬請期待.

相關文章:

  1. 緩存淘汰算法系列之2——LFU類
  2. 緩存算法 
相關文章
相關標籤/搜索