技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
0
Software Development
深入淺出設計模式 - 使用 C++
系列 第
36
篇
《補充》 — 5 Classic Caching Strategies
15th鐵人賽
softwareengineering
JC
2023-10-17 00:02:35
1529 瀏覽
分享至
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]
Reference
https://zhuanlan.zhihu.com/p/150740291
https://www.jyt0532.com/2018/09/23/cache-mechanism/
https://blog.bytebytego.com/p/top-caching-strategies
留言
追蹤
檢舉
上一篇
《補充》 — 30+ Golden Rules in System Design
下一篇
《進階補充》 — Linux Kernel 中的經典 C Macro
系列文
深入淺出設計模式 - 使用 C++
共
37
篇
目錄
RSS系列文
訂閱系列文
8
人訂閱
33
《軟體工程篇 - 5》 — 軟體測試方法 (Software Testing)
34
《補充》 — Design Patterns Used Across Different Layers in Distributed System
35
《補充》 — 30+ Golden Rules in System Design
36
《補充》 — 5 Classic Caching Strategies
37
《進階補充》 — Linux Kernel 中的經典 C Macro
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
9268
篇
完賽人數
94
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
17th鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
熱門問題
想請教如何定義資料庫的Primary Key
【求助】顯卡/主板 支援 PCIe4.0 為何 Host to Device (H2D) 只剩 Gen1 速度 (0.5 GB/s) ?
請問今天鐵人賽的發文系統是否故障?
Windows GPO Bitlocker
Exi 8.0版本上的虛擬機器, 安裝的作業系統是Windows Server 2025, 確定輸入的密碼是正確的, 無法登入(顯示密碼錯誤)
HP iLo Advanced trial license
Docker Compose 建立 GitLab 容器,執行器 Runner 運行流水線問題
在線求大神,千奧軟體主機怎麼安裝
別點
熱門回答
想請教如何定義資料庫的Primary Key
Windows GPO Bitlocker
【求助】顯卡/主板 支援 PCIe4.0 為何 Host to Device (H2D) 只剩 Gen1 速度 (0.5 GB/s) ?
Exi 8.0版本上的虛擬機器, 安裝的作業系統是Windows Server 2025, 確定輸入的密碼是正確的, 無法登入(顯示密碼錯誤)
熱門文章
[為你自己學 Gemini CLI ... 的原始碼] 第 1 天,從黑黑的畫面開始!
[為你自己學 Gemini CLI ... 的原始碼] 第 2 天,主程式裡的 Hello Kitty!
[為你自己學 n8n] 第 2 天,挑個風水寶地,養你的自動化小精靈!
[為你自己學 n8n] 第 1 天,用節點拼出你的自動化世界!
0x01 / HTTP.予咱一切的基礎崩·去.Smuggling
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}