分散式快取 - 快取簡介,常用快取演算法

BNMZY發表於2020-10-28

1. 客戶端快取

 

2. 網路中快取

 

3. 服務端快取

 

3.1 資料庫快取

 

3.2 平臺級快取

 

3.3 應用級快取

 

3.3.1快取演算法

快取演算法的幾個專業術語

  • 快取命中 :客戶發起一個請求時,系統收到這個請求,如果該請求的資料在快取中,這一資料就會被使用,這一行為叫做快取命中
  • 沒有命中 : 沒有命中,如果此時快取還有儲存空間,那麼沒有命中的物件會被儲存到快取中
  • 儲存成本 : 當快取沒有命中時,系統會從資料庫或其他資料來源取出資料,然後放入快取,把這個資料放入快取所需要的的時間和空間,就是儲存成本。
  • 快取失效 : 當儲存在快取中的資料需要更新時,就意味著快取中的這一資料失效了
  • 替代策略 : 當快取沒有命中時,並且快取容量已經滿了,就需要在快取中去除一條舊資料,然後放入該新資料,至於去除哪條資料就由替代策略決定

 
替代策略的具體實現就是快取演算法,以下是主流的快取演算法

  1. Least-Recently-Used(LRU)
    替換掉最近被請求最少的物件,這種傳統策略在實際中應用最廣。在CPU快取淘汰和虛擬記憶體系統中效果很好。然而直接應用與代理快取中效果欠佳。因為Web訪問的時間區域性性常常變化很大。瀏覽器一般是用了LRU作為快取演算法,新的物件會被放在快取的頂部,當快取達到了容量極限,底部的物件被去除,方法就是把最新被訪問的快取物件放到快取池的頂部。

  2. Least-Frequently-Used(LFU)
    替換掉訪問次數最少的快取,這一策略的意圖是保留最常用的、最流行的物件,替換掉很少使用的那些資料。然而,有的資料可能有很高的使用頻率,但是之後再也不會用到,傳統的LFU策略並沒有提供任何一處這類檔案的機制,因此會導致快取汙染,阻礙了新進來的可能會流行的物件對它的替代

  3. Least Recently Used(LRU2)
    LRU的變種,把被兩次訪問過的物件放入快取,當快取池滿了後,會把有兩次最少使用的快取物件去除,因為需要跟蹤物件兩次,訪問負載就會隨著快取池的增加而增加

  4. Two Queues(2Q)
    Two Queues是LRU的另一個變種,把被訪問的資料放到LRU的快取中,如果這個物件再一次被訪問,就把他轉移到第二個、更大的LRU快取,使用了多級快取的方式。去除快取物件是為了保持第一個快取池是第二個快取池的1/3.當快取的訪問負載是固定的時候,把LRU換成LRU2,就比增加快取的容量更好

  5. SIZE
    替換佔用空間最大的物件,這一策略通過淘汰一個大物件而不是多個小物件來提高命中率。不過可能進入快取的小物件永遠不會再被訪問。SIZE策略沒有提供淘汰這類物件的機制,會導致快取汙染

  6. LRU - Threshold
    不快取超過某一size的物件,其他與LRU相同

  7. Log(Size) + LRU
    替換size最大的物件,當size相同時,按LRU進行替換

  8. Hyper-G
    LFU的改進版,同時考慮上次訪問時間和物件size

  9. Pitkow/Recker
    替換最近最少使用的物件,除非所有物件都是今天訪問過的。如果是這樣,則替換掉最大的物件。這一策略試圖符合每日訪問Web網頁的特定模式。這一策略也被建議在每天結束時執行,以釋放被“舊的”、最近最少使用的物件佔用空間

  10. Lowest-Latency-First
    替換下載時間最少的文件,顯然他的目標是最小化平均延遲

  11. Hybrid Hybrid
    有一個目標是減少平均延遲。對快取中的每個文件都會計算一個保留效用,保留效用最低的物件會被替換掉,位於伺服器 s 的文件 f 效用函式定義如下:

在這裡插入圖片描述
Cs是與伺服器 s 的連線時間,bs是伺服器 s 的頻寬;frr代表 f 的使用頻率;sizef是文件 f 的大小,單位位元組。K1 和 K2 是常量,Cs 和 bs 是根據最近從伺服器s獲取文件的時間進行估計的

  1. Lowest Relative Value (LRV)
    LRV是基於計算快取中文件的保留效用,然後替換保留效用最低的文件

  2. Adaptive Replacement Cache
    ARC介於 LRU 和 LFU之間,為了調高效果,由兩個LRU組成,第一個包含的條目是最近只被使用過一次的,而第二個LRU包含的是最近被使用過兩次的條目,因此,得到了新的物件和常用的物件,ARC可以自我調節,並且是低負載的

  3. Most Rencently Used(MRU)
    MRU 和 LRU 是相對的,移除最近最多被使用的物件。當一次訪問過來的時候,有些事情是無法預測的,並且在快取系統中找出最少最近使用的物件是一項時間複雜度非常高的運算,這時會考慮MRU,在資料庫記憶體快取中比較常見

  4. First in First out(FIFO)
    FIFO通過一個佇列去跟蹤所有的快取物件,最近最常用的快取物件放在後面,而更早的快取物件放在前面,當容量滿的時候,前面的快取物件會被踢走,然後把新的快取物件加進去

  5. Random Cache
    隨機快取就是隨意的替換快取資料,比FIFO機制好,在某些情況下,甚至比LRU好,但是通常還是LRU好

相關文章