快取模式概要

指尖揮舞發表於2022-05-31

背景

在大部分C端專案中,如果想提升系統併發能力,需要上快取。但是快取的實現方式多種多樣,本文主要穿透實現,直接闡述設計模式上的概念,方便各種實現對號入座。

概念

  • SoR(System-of-Record )
    記錄系統,這裡指的就是實際資料存放的系統,一般指業務對應的資料庫

分類

1. Cache-aside

  • 讀取虛擬碼

    點選檢視程式碼
    v = cache.get(k)
    if (v == null) {
      v = sor.get(k)
      cache.put(k, v)
    }
    
  • 寫入虛擬碼

    點選檢視程式碼
    v = newV
    sor.put(k, v)
    cache.put(k, v)
    

這種模式下,需要應用程式嵌入快取處理的邏輯:
- 在查詢時,判斷快取是否存在記錄,有直接返回;沒有則從SoR中獲取,再更新快取。
- 在寫入時,快取必須和記錄系統一起更新

2. Cache-as-SoR

快取即 SoR 模式: 使用快取和使用記錄系統無差別(無感知)。這種模式下對讀寫場景需要做具體實現:

2.1 讀場景

  • Read-through
    讀場景下,一般採用Read-through模式,快取中介軟體提供一個loader元件,對應用程式來說只與loader互動,實際底層並不關心實現。

2.2 寫場景

寫場景下,主要描述如何更新快取,有以下兩種選擇

  • Write-through
    更新資料時,快取中介軟體提供一個write元件,對應用程式來說只需要知道更新了資料。具體邏輯由元件實現,去更新記錄系統,並更新快取
  • Write-behind
    在更新資料的時候,只更新快取,不更新資料庫,從而提高資料更新的響應速度。快取會非同步地批量更新資料庫,代價就是資料不是強一致的。

參考

相關文章