文章目錄
- 概述
- 讀策略
- Cache Aside
- Read Through
- 寫策略
- Write Through
- Write Around
- Write Back
- 使用場景舉例
概述
緩存是在系統中存儲數據的臨時存儲器,用于提高訪問速度。緩存策略定義了如何在緩存和主存之間管理數據
讀策略
Read data from the system:
🔹 Cache aside
🔹 Read through
Cache Aside
概念: 應用程序負責將數據寫入和從緩存讀取,緩存不主動參與。
作用: 簡化實現,但可能導致緩存臟數據。
應用程序自己管理緩存。當需要數據時,應用程序會先在緩存中查找,如果不存在,才到數據庫中加載。加載到數據庫后,同時保存到緩存中。這種策略簡單直接,應用程序有完全控制權。但問題是代碼復雜,需要自己處理緩存失效、預熱、異步加載等問題。
Read Through
概念: 數據訪問時,緩存負責檢查是否有所需數據。如果不存在,緩存負責從主存中獲取。
作用: 自動化數據加載,減少了應用程序的負擔,但可能導致讀取性能損失。
應用程序只查詢緩存,不直接訪問數據庫。如果緩存不存在,則自動從數據庫加載,然后返回給應用程序,同時更新緩存。這簡化了應用程序代碼,但也限制了應用程序直接訪問數據庫
寫策略
Write data to the system:
🔹 Write around
🔹 Write back
🔹 Write through
Write Through
概念: 寫入時同時到緩存和主存,確保主存和緩存中的數據一致。
作用: 數據一致性,但可能導致寫入性能較低。
數據修改請求直接寫入數據庫,同時也保存到緩存中(不是所有實現都這么做)。所以,緩存能保證和數據庫一致性。但每次寫操作都會比較慢
Write Around
概念: 寫入時直接到主存,而不是到緩存。緩存只在讀取時更新。
作用: 避免緩存污染,適用于大量寫入但很少讀取的情況。
直接寫入數據庫,但不寫入緩存。這可以減輕緩存的壓力,但是讀取數據時緩存在沒有命中,需要從數據庫中加載數據然后放入緩存,性能比較差。
Write Back
概念: 寫入時只到緩存,延遲寫回主存。緩存跟蹤哪些數據被修改。
作用: 提高寫入性能,但可能導致數據不一致。
使用場景舉例
-
Cache Aside:
- 案例: 在一個電子商務網站中,商品信息被頻繁讀取,但更新并不頻繁。采用 Cache Aside 策略,應用程序在需要時直接從數據庫讀取商品信息,然后將其緩存在內存中。如果有更新,應用程序負責同時更新數據庫和緩存。
-
Read Through:
- 案例: 在一個社交媒體應用中,用戶的個人資料信息經常被訪問。使用 Read Through 策略,當用戶請求個人資料時,緩存會檢查是否存在,如果不存在,它將從數據庫中讀取用戶的個人資料并將其存儲在緩存中,以便下一次訪問。
-
Write Around:
- 案例: 在一個日志記錄系統中,日志條目的寫入頻率很高,但很少讀取。采用 Write Around 策略,應用程序直接將日志寫入主存儲,而不將其寫入緩存。緩存僅用于讀取請求,以避免緩存污染。
-
Write Back:
- 案例: 在一個文件系統中,用戶頻繁編輯文檔。使用 Write Back 策略,文件系統將用戶編輯的文檔暫時保存在緩存中,而不是立即寫回主存儲。只有當緩存滿或文檔不再被頻繁訪問時,才將更改寫回主存儲。
-
Write Through:
- 案例: 在一個金融交易系統中,每筆交易都需要確保立即寫入主存儲并更新緩存。采用 Write Through 策略,系統在執行每筆交易時同時將數據寫入緩存和主存儲,以確保數據的一致性。