iT邦幫忙

2023 iThome 鐵人賽

0
Software Development

深入淺出設計模式 - 使用 C++系列 第 36

《補充》 — 5 Classic Caching Strategies

  • 分享至 

  • xImage
  •  

Classic Caching Strategy

1. Cache Aside

  • 在這種模式下,應用程式碼負責維護緩存和數據庫之間的一致性。
  • 流程
    • 讀取(Read): 首先查詢緩存,如果未命中(Miss),則查詢數據庫並將結果存入緩存
    • 寫入(Write): 直接寫入數據庫,然後使緩存中的相應項目失效
  • 優缺點
    • 優點: 簡單,易於實現
    • 缺點: 應用程式需要手動維護緩存和數據庫的一致性
  • 適用場景
    • 當數據讀取遠多於寫入,並且可以容忍一定程度的數據不一致
    • 例: 使用者個人資料的讀取,社交網絡的朋友列表
  • 技術選擇
    • Redis、Memcached

2. Read Through

  • 在緩存未命中時,緩存自動從數據庫讀取數據並填充緩存
  • 優缺點
    • 優點: 簡化了應用程式邏輯
    • 缺點: 可能會導致初次讀取的延遲
  • 適用場景
    • 當應用程式需要簡單的緩存管理,並且希望緩存和數據庫之間的數據始終保持一致
    • 商品庫存信息,實時金融報價
  • 技術選擇
    • Hazelcast、Oracle Coherence

3. Write Through

  • 應用程式將寫入操作同步進到緩存和數據庫
  • 流程
    • 寫入操作首先更新緩存,然後同步更新數據庫
  • 優缺點
    • 優點: 確保緩存和數據庫的一致性
    • 缺點: 寫入操作的延遲可能會增加
  • 適用場景
    • 可用性和數據一致性是首要考慮因素
    • 銀行交易,訂單處理
  • 技術選擇
    • Redis、AWS DynamoDB Accelerator (DAX)

4. Write Around

  • 寫入操作僅直接進到數據庫,緩存不會立即更新
  • 流程
    • 寫入操作直接更新數據庫,緩存中的相應項目會被失效或略過
  • 優缺點
    • 優點: 減少不必要的緩存更新
    • 缺點: 可能會導致緩存未命中率增加
  • 適用場景
    • 當數據寫入操作不經常讀取,或者寫入操作的數據量非常大
    • 日誌寫入,批量數據處理
  • 技術選擇
    • 通常是自定義解決方案

5. Write Back

  • 寫入操作首先更新緩存,然後在後台異步更新數據庫
  • 流程
    • 寫入操作首先更新緩存,然後由一個後台進程異步更新數據庫
  • 優缺點
    • 優點: 寫入操作非常快,因為它僅涉及到緩存
    • 缺點: 如果緩存失敗,可能會導致數據丟失
  • 適用場景
    • 當寫入延遲需要最小化,並且可以容忍一定程度的數據不一致或數據丟失
    • 購物車信息,即時消息
  • 技術選擇
    • Redis、Hazelcast

Summary [3]

https://ithelp.ithome.com.tw/upload/images/20231016/20138643LujIiywdT2.jpg

Reference

  1. https://zhuanlan.zhihu.com/p/150740291
  2. https://www.jyt0532.com/2018/09/23/cache-mechanism/
  3. https://blog.bytebytego.com/p/top-caching-strategies

上一篇
《補充》 — 30+ Golden Rules in System Design
下一篇
《進階補充》 — Linux Kernel 中的經典 C Macro
系列文
深入淺出設計模式 - 使用 C++37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言