14.2%企業願意聘用大資料人才
Cloud Future Built Today
IT EXPLAINED 數位轉型攻略 VII
技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
0
Software Development
深入淺出設計模式 - 使用 C++
系列 第
36
篇
《補充》 — 5 Classic Caching Strategies
15th鐵人賽
softwareengineering
JC
2023-10-17 00:02:35
1064 瀏覽
分享至
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
完整目錄
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22206
篇
完賽人數
600
人
看影片追技術
看更多
{{ 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
熱門問題
這題程式設計我解很長一段時間但都解不開
關於備份 3-2-1 原則
使用viewmodel背景更新RecyclerView的API數據列表,但是notifyDataSetChanged()無動作問題
用Outlook收Gmail的信
Fortigate 60E升級60F,設定檔通用嗎?
今年要考CKA
鼎新 Workflow ERP 資產負債表問題
fortigate101F 中央控管一直在未納管
Blender剪片無法正確使用
DHCP與LAN連線問題請益
Windows 10支援倒數,聯繫微軟夥伴諮詢
DevOpsDays Taipei 2025 論壇議程搶先看!帶您掌握最新技術趨勢、提升實戰技能
GenAI 加速企業創新落地,更需要全新 IT 戰略
立即標記行事曆,7/2 探索 AI 與雲端的無限未來!
熱門回答
Fortigate 60E升級60F,設定檔通用嗎?
用Outlook收Gmail的信
關於備份 3-2-1 原則
今年要考CKA
鼎新 Workflow ERP 資產負債表問題
熱門文章
Python Discord Bot 實作筆記
續談 MCP Server︰Resource、Server Inspector
Firefox 清除單一網站 清除Cookie與網站資料
Sequence Detector:用 FSM 與 Shift Register 精準偵測 "111"!
【Mikrotik RouterOS 系列1】QNAP Virtualization Station 工作站安裝及建置軟路由
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}