Redis緩存擊穿、緩存雪崩問題

緩存擊穿:(針對某個數據)

問題描述:用戶請求不存在的key,緩存中不存在,請求會繞過緩存直接查詢數據庫導致性能下降,如果用戶惡意多次請求不存在的key,就會有性能問題,導致後臺崩潰。

解決方式:

1,查詢DB的時候使用 互斥鎖

2,設置默認值,空值如設置成“NULL”。

3,使用BloomFilter,用於驗證哪些查詢有數據,有數據再查詢DB,也是爲了解決空值問題。

緩存雪崩:(針對批量數據)

問題描述:緩存失效期間請求將會去查詢數據庫,從而對數據庫CPU和內存造成巨大壓力,嚴重將造成整個系統的崩潰,如果某臺緩存節點掛了,或者大批數據緩存失效了,就會導致此問題出現。

解決方式:

1,加鎖排隊,避免大量線程讀寫數據庫。

2,緩存失效時間,加上一定隨機數,防止同時失效。

3,緩存備份,如果緩存失效,則從備份緩存讀取,備份緩存與主緩存失效時間不一樣,甚至設置不失效,當主緩存失效後,去備份查,並通知另外的線程異步去更新緩存。

4,緩存失效時間設置爲真實失效時間的兩倍,檢測到失效後,先返回緩存的值,並通知另外的線程異步更新緩存。(其實是方法3的另一種方式)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章