定義理解
緩存雪崩是指在同一時間段,大量緩存的key同時失效,或者Redis服務宕機,導致大量請求到達數據庫,帶來巨大壓力
和緩存擊穿的區別:
- 緩存雪崩是由于緩存中的大量數據同時失效或緩存服務器故障引起的;
- 而緩存擊穿則是由于某個特定的熱點數據失效且有大量并發請求訪問引起的。
- 緩存雪崩會影響到緩存中大量數據,導致整個系統的性能下降;
- 而緩存擊穿通常只涉及到某個特定的熱點數據。
解決方案
- 給不同的Key的TTL添加隨機值,讓其在不同時間段分批失效
- 利用Redis集群提高服務的可用性(使用一個或者多個哨兵(Sentinel)實例組成的系統,對redis節點進行監控,在主節點出現故障的情況下,能將從節點中的一個升級為主節點,進行故障轉義,保證系統的可用性。 )
- 給緩存業務添加降級限流策略
- 給業務添加多級緩存(瀏覽器訪問靜態資源時,優先讀取瀏覽器本地緩存;訪問非靜態資源(ajax查詢數據)時,訪問服務端;請求到達Nginx后,優先讀取Nginx本地緩存;如果Nginx本地緩存未命中,則去直接查詢Redis(不經過Tomcat);如果Redis查詢未命中,則查詢Tomcat;請求進入Tomcat后,優先查詢JVM進程緩存;如果JVM進程緩存未命中,則查詢數據庫)