一、緩存穿透
1.產生原因:
查詢方式是先查詢緩存、如果緩存不存在則查詢數據庫、將查詢的結果回寫到緩存、穿透的概念是緩存不存在的情況下查詢數據庫、高併發應用下可能造成數據庫壓力過大
2.解決方案:
2.1:將對應的key爲空的值也緩存起來,減少數據庫的查詢
2.2:校驗key值的合法性、防止惡意攻擊
二、緩存併發
1.產生原因:
高併發場景下同時大量查詢過期的key值、最後查詢數據庫將緩存結果回寫到緩存、造成數據庫壓力過大
2.解決方案:
2.1:採用分佈式鎖-每次操作給當前操作上鎖、高併發壓力轉移到了分佈式鎖
2.2:採用本地鎖-數據庫的查詢上鎖、但是多節點的情況下多數據庫查詢無效
2.3:軟過期-手動設置緩存失效時間或者單獨開闢線程去更新緩存數據
三、緩存雪崩
1.產生原因:
服務器重啓或者同一時間內緩存失效、容易造成數據庫假死
2.解決方案:
2.1:手動設置redis過期策略、延長redis失效時長