目錄
- 1、緩存雪崩
- 【1】定義
- 【2】原因
- 【3】解決方案
- [1]差異化過期時間
- [2]多級緩存
- [3]熔斷降級
- [4]緩存永不過期+異步更新
- 2、緩存擊穿
- 【1】定義
- 【2】原因
- 【3】解決方案
- [1]互斥鎖
- [2]邏輯過期
- [3]熱點數據加載
- 3、緩存穿透
- 【1】定義
- 【2】原因
- 【3】解決方案
- [1]緩存空對象
- [2]布隆過濾器
- [3]參數校驗
- 4、對比總結
- 5、最佳實踐
1、緩存雪崩
【1】定義
大量緩存數據在同一時間失效,導致所有請求直接打到數據庫,引發數據庫瞬時高負載甚至崩潰
【2】原因
1、緩存數據設置了相同的過期時間
2、緩存服務宕機
【3】解決方案
[1]差異化過期時間
在基礎TTL上增加隨機值,避免同時失效
[2]多級緩存
結合本地緩存和分布式緩存,本地緩存失效后回源到分布式緩存
[3]熔斷降級
監控數據庫負載,超過閾值時觸發熔斷(如返回默認值或限流)
[4]緩存永不過期+異步更新
緩存不設TTL,通過后臺任務定期更新(適合低頻變更數據)
2、緩存擊穿
【1】定義
某個熱點key突然失效,大量并發請求直接穿透到數據庫,導致數據庫壓力激增
【2】原因
1、熱點key過期
2、惡意請求故意攻擊高頻訪問的key
【3】解決方案
[1]互斥鎖
第一個請求發現緩存失效時,加鎖(如Redis SETNX),從數據庫加載數據后釋放鎖,其它請求等待或輪詢
[2]邏輯過期
1、緩存永不過期,但存儲數據時附加一個過期時間字段
2、發現數據邏輯過期時,觸發異步更新
[3]熱點數據加載
監控熱點key,在接近過期時提前刷新緩存
3、緩存穿透
【1】定義
查詢不存在的數據(如非法ID、惡意攻擊),導致請求繞過緩存直接訪問數據庫
【2】原因
1、業務邏輯漏洞(如未校驗參數合法性)
2、惡意攻擊(如爬蟲偽造不存在的ID)
【3】解決方案
[1]緩存空對象
對查詢不到的數據,混存一個空值,并設置較短TTL
[2]布隆過濾器
在緩存層前加布隆過濾器,快速判斷key是否存在:若布隆過濾器返回不存在,直接拒絕請求;若返回可能存在,繼續查詢緩存/數據庫
[3]參數校驗
對請求參數做合法性校驗
4、對比總結
問題 | 觸發條件 | 核心解決方案 |
---|---|---|
緩存雪崩 | 大量key同時失效 | 差異化TTL、多級緩存、熔斷降級 |
緩存擊穿 | 單個熱點key失效 | 互斥鎖、邏輯過期、預加載 |
緩存穿透 | 查詢不存在的數據 | 布隆過濾器、控制緩存、參數校驗 |
5、最佳實踐
1、監控與告警:實時監控緩存命中率、數據庫QPS,設置閾值告警
2、壓測模擬:通過模擬雪崩/擊穿場景,驗證解決方案的可靠性
3、組合策略:根據業務場景混合使用上述方案