技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
0
Software Development
深入淺出設計模式 - 使用 C++
系列 第
36
篇
《補充》 — 5 Classic Caching Strategies
15th鐵人賽
softwareengineering
JC
2023-10-17 00:02:35
600 瀏覽
分享至
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系列文
訂閱系列文
7
人訂閱
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鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22080
篇
完賽人數
594
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
WIN11 一直跳出中毒的訊息
資料庫系統
網域切換的技術詢問
PYTHON 工具
如何讓內網的FortiGate防火牆可以收到韌體更新與下載
請問華碩分享器的系統紀錄這是在說明什麼
掃qr code圖示後是同時進入兩個網址
Mail server 資料不見
UPS相關供電問題
有關於Plesk 記憶體使用 的疑惑
熱門回答
WIN11 一直跳出中毒的訊息
如何讓內網的FortiGate防火牆可以收到韌體更新與下載
PYTHON 工具
資料庫系統
有關於Plesk 記憶體使用 的疑惑
熱門文章
PrintNightmare: 沒想到會被 Windows 11 終結
Day 39 - 使用 Angular 19 中的 Resource API 進行資料檢索
Day 38 - 在 Angular 19 中重置或設定 LinkedSignal 中的值
後 Grafana 時代的第三十一天 - AlertSnitch 告警歷史可視化的利器
當了兩個月的轉職工程師是怎樣的感覺?
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}