Redis快取穿透、快取擊穿快取雪崩
redis常被用于作為后臺資料庫的快取,快取一些熱點訪問資料,根據區域性原理,快取能夠處理大部分請求,當請求資料未命中快取時,才會引起對資料庫的訪問,
使用redis作為快取時,存在一些應用問題,包括快取穿透、快取擊穿、快取雪崩,

快取穿透
當有大量查詢請求未命中快取時,引起對后臺資料庫的頻繁訪問,導致資料庫負載壓力增大,這種現象就叫做快取穿透,
引起的原因:
- 黑客大量訪問不存在的key,導致資料庫處理大量請求
解決方法:
- 將無效的key存進Redis中,若果資料庫查詢某個key不存在時,同樣將這個key快取到Redis快取中,并設定value為NULL,表示不存在,如果攻擊請求的key每次都相同,該方法有效;如果攻擊請求的key每次隨機生成,則同樣會產生快取穿透問題,
- 使用布隆過濾器,過濾掉一些不存在的key,布隆過濾器判定為true時,key可能存在于資料庫中,也可能不存在;判定為false時,key一定不存在于資料庫,

快取擊穿
當Redis中存在某些極熱點資料時,即有大量請求并發訪問的key-value資料,當極熱點key-value資料突然失效時,快取未命中引起對后臺資料庫的頻繁訪問,這種現象叫快取擊穿,
引起的原因
- 快取上極熱點資料突然失效
解決方法
- 對極熱點key設定永不過期
- 使用互斥鎖,如果快取失效的情況,只有拿到鎖才可以查詢資料庫,降低了在同一時刻訪問資料庫的請求量,防止資料庫崩潰,缺點是會導致系統的性能變差,

快取雪崩
當某?時刻發??規模的快取失效的情況,例如快取服務宕機、大量key在同一時間過期,這樣的后果就是?量的請求進來直接打到DB上,可能導致整個系統的崩潰,稱為雪崩,如果運維重啟宕機的資料庫,馬上又會有大量新的請求流量到來,再次引起資料庫宕機,
可能的原因
- redis宕機、重啟
- 大量資料使用了同一過期時間
解決方法
- 引入隨機性,在原有快取失效時間上加上一個隨機值,避免大量資料在同一時間失效,
- 通過請求限流、熔斷機制、服務降級等手段,降低服務器負載,
- 實作快取組件的高可用,防止單點故障、機器故障、機房宕機等一系列問題,
- 提高資料后臺資料庫的容災能力,

參考
十分鐘徹底掌握快取擊穿、快取穿透、快取雪崩_mb5fdb099dd338a的技術博客_51CTO博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454677.html
標籤:NoSQL
下一篇:CentOS7 安裝MySQL5.7企業版(商業版)及修改my.cnf默認datadir、socket路徑后無法啟動的處理方法
