緩存 —— 緩存更新策略(1)

策略1: Read/Write Through

緩存策略

讀請求處理策略

  • 緩存命中,直接返回緩存數據;
  • 緩存未命中,從數據庫加載數據,更新緩存;

寫請求處理策略

  • 先更新數據庫,然後更新緩存;
    在這裏插入圖片描述

數據不一致情況

  • 情況1: 讀請求處理期間,併發的寫請求更新數據,導致緩存最終數據爲舊數據;(無法實現最終一致性,實際情況發生的概率極低)
    在這裏插入圖片描述
  • 情況2: 寫請求1處理期間,併發的寫請求2更新數據,導致緩存最終數據爲舊數據;(無法實現最終一致性,併發情況下發生概率較高)
    在這裏插入圖片描述

策略2: Cache Aside(推薦)

緩存策略

讀請求處理策略

  • 緩存命中,直接返回緩存數據;
  • 緩存未命中,從數據庫加載數據,更新緩存;

寫請求處理策略

  • 先更新數據庫,然後刪除緩存;

在這裏插入圖片描述

數據不一致情況

  • 情況1: 寫請求處理期間,併發的讀請求讀取到舊數據,寫完成後緩存更新到最新數據;(最終一致性)
    在這裏插入圖片描述
  • 情況2: 讀請求處理期間,併發的寫請求更新數據,導致緩存最終數據爲舊數據;(無法實現最終一致性,實際情況中發生的概率極低,因爲需要讀請求的處理時間大於寫請求處理時間,並且緩存失效,正常情況寫請求處理時間大於讀請求)
    在這裏插入圖片描述

Read/Write Through VS Cache Aside

  高併發情況下,Read/Write Through策略發生數據不一致的概率高,而Cache Aside策略極大的降低了併發時髒數據的概率,因此實際項目中會使用Cache Aside策略,同時爲緩存設置過期時間進行兜底。

參考:

  1. 緩存更新的套路
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章