1、 緩存穿透
- 原因:總是查詢不存在的數(shù)據(jù),當大量請求不存在的數(shù)據(jù)時,最終請求會落在數(shù)據(jù)庫上會給數(shù)據(jù)庫帶來很大壓力。
- 解決辦法:設置返回空對象,而不是返回null,這樣請求不會大量落在數(shù)據(jù)庫上。
2、緩存擊穿
- 原因:大量請求訪問同一份熱點數(shù)據(jù),剛好遇到熱點數(shù)據(jù)即將過期,大量請求最終落在數(shù)據(jù)庫上。
- 解決辦法:1、設置熱點數(shù)據(jù)永不過期 2、加鎖操作,當一個線程訪問數(shù)據(jù)之后重建緩存。
3、緩存雪崩
- 原因:1、可能是大量請求剛好遇到大量的key同時過期 2、可能是Redis服務器宕機
- 解決辦法:1、給緩存數(shù)據(jù)過期時間附加隨機值,避免大量的數(shù)據(jù)同時失效 2、構建高可用的Redis集群,避免單機宕機導致服務不可用。