深入分散式快取 — 學習總結

dack發表於2018-07-16

什麼是快取

儲存在計算機上的一個原始資料複製集,以便於訪問。 –維基百科

快取是系統快速響應中的一種關鍵技術,是一組被儲存起來以備將來使用的東西,介於應用開發跟系統開發之間。
根據軟體系統中所處位置的不同,快取大體可以分為三類:

  • 客戶端快取
  • 伺服器快取
  • 網路中的快取

根據規模和部署方式快取也可以分為:

  • 單體快取
  • 快取叢集
  • 分散式快取

客戶端快取

頁面快取:

  • 頁面自身的快取或者離線應用快取,頁面自身對某些元素或全部元素進行快取,或服務端將靜態頁面或動態頁面的元素進行快取。
  • 頁面快取是將之前渲染的頁面儲存為檔案,當使用者再次訪問時可以避開網路連線,從而減少負載,提升效能和使用者體驗。

瀏覽器快取:

  • 根據一套與伺服器約定的規則進行工作:檢查確定副本是否最新,通常只要一次會話。
  • 補充——

app快取

網路中的快取

web代理快取

邊緣快取

服務端快取

資料庫快取

  • 資料庫屬於IO密集型的應用,主要負責資料的管理及儲存。資料庫快取是一類特殊的快取,是資料庫自身的快取機制。
  • 以mysql為例,mysql中使用了查詢緩衝機制,將SELECT語句和查詢結果存放在緩衝區中,以後對於同樣的SELECT語句,講直接從快取區中讀取結果,以節省查詢時間,提高了sql查詢的效率。

平臺級快取

  • 在系統開發中,適當的使用平臺級快取往往可以取得事半功倍的效果。
  • 在這裡指用來寫帶有快取特性的應用框架,或者可用於快取功能的專用庫。

應用級快取

當平臺級快取不能滿足系統效能要求時,就要考慮使用應用級快取了。應用級快取,需要開發者通過程式碼來實現快取機制,這裡是nosql的勝場,無論是Redis還是MongoDB,以及Memcached都可以作為應用級儲存的重要技術。

快取演算法:在實現快取應用的時候,需要了解快取技術中的幾個術語。

  • 快取命中:請求的資料在快取中。
  • 沒有命中:cache miss,如果快取中還有儲存空間,那麼沒有命中的物件會被儲存到快取中來。
  • 儲存成本:當cache miss,系統會從資料庫或者其他資料來源取出資料,然後放入儲存,這個過程需要時間和空間,這就是快取成本。
  • 快取失效:當儲存在快取中的資料需要更新時,就以為著快取中的這一資料失效了。
  • 替代策略:當快取沒有命中時,並且快取容量已經滿了,就需要在快取中去除一條舊資料,然後加入一條新資料,替代的選擇就有替代策略決定。

    • Least-Recently-Used(LRU):最近被請求最少的物件
    • Least-Frequently-Used(LFU):訪問次數最少的物件
    • SIZE:佔用空間最大的物件

相關文章