廣義上講,凡是位於速度相差較大的兩種硬件之間,用於協調二者數據傳輸速度差別的結構,都可稱之爲緩存
是一種常見的空間換時間的性能優化手段
算法
常見案例
- Linux MMU 使用LTB來緩存最近虛擬地址和物理地址的映射。
- 刷視頻預緩存下一個視頻
- HTTP協議 ETag
緩存與緩衝區
緩存區是用於彌補高速設備和低速設備通訊時的速度差。一塊臨時存儲數據的區域,這些數據後面會一次性傳輸到其餘設備上數據庫
緩存分類
- 靜態緩存
HTML,對動態請求的數據無力。
- 分佈式緩存
Redis、Memcached
- 熱點本地緩存
極端的熱點數據查詢。 HashMap,Guava Cache
緩存的不足
系統複雜度、數據不一致、運維、內存有限,比較適合讀多寫少,數據帶有一點熱點屬性的業務場景後端
緩存的讀寫策略
- Cache Aside 旁路緩存策略
- 讀策略
- 從緩存中讀取數據
- 命中,直接返回
- 不命中,從數據庫中查
- 查後,數據寫入緩存,並返回給用戶
- 寫策略
- 更新數據庫中的記錄
- 刪除緩存
最經常使用,但當寫入比較頻繁時,緩存中的數據會被頻繁地清理。
- Read/Write Through 讀穿/寫穿策略
由緩存節點而非用戶來和數據庫打交道,而且寫數據庫是同步的,對性能來講比較大影響緩存
- Write Back 寫回策略
在寫入數據時只寫入緩存,並把緩存塊標記爲「髒」,髒塊只有被再次使用時纔會將其中的數據寫回後端存儲中
分佈式緩存高可用方案
- 客戶端方案
中間代理層方案
分佈式
服務端方案
ide
緩存穿透
緩存中沒有查到數據,不得不從後端系統中查詢的狀況。性能