技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
0
Software Development
深入淺出設計模式 - 使用 C++
系列 第
36
篇
《補充》 — 5 Classic Caching Strategies
15th鐵人賽
softwareengineering
JC
2023-10-17 00:02:35
1756 瀏覽
分享至
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
組
累計文章數
19854
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
使用Aruba 1960接上Gbic沒動作
全新拆封Aruba AP無法接管..
Proxmox mirgrate 有時候會跳出 redirections(599)
window.open參數傳遞問題
如何修復 ICMP Timestamp Request Remote Date Disclosure弱點
PRC端DNS解析問題....
ASP開啟已存在的Excel檔案
請教TRAE的PRO會員快速請求已經用完600點以後如何繼續使用?(已找到答案)
docker+ N8N-Ai agent Tool使用問題請教
跨平台網頁元件只能開放管理者使用權限才能用??
熱門回答
使用Aruba 1960接上Gbic沒動作
window.open參數傳遞問題
PRC端DNS解析問題....
ASP開啟已存在的Excel檔案
全新拆封Aruba AP無法接管..
熱門文章
Excel VBA建聖誕購物決策樹:Gen Z預算分配模型
【kintone 外部串接】Google 表單自動登錄至 kintone - 實作範例
準備 CKS 的實戰心得分享
JavaScript很難搞懂的底層機制原型鏈的 __proto__ 、prototype
整合 Gemini AI 的 LINE Bot - 雲端情人實作 (一) 專案介紹與技術架構
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}