1、穿透
何為穿透:指查詢一個一定不存在的數據,由于緩存是不命中,將去查詢數據庫,但是數據庫也無此記錄,我們沒有將這次查詢的null寫入緩存,這將導致這個不存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義
造成風險:利用不存在的數據進行攻擊,數據庫瞬時壓力增大,最終導致崩潰
解決方式:null結果緩存,并加入短暫過期時間
2、雪崩:大面積key同時失效
何為雪崩:緩存雪崩是指在我們設置緩存時key采用了相同的過期時間,導致緩存在某一時刻同時失效,請求全部轉發到DB,DB瞬時壓力過重雪崩。
解決方案:原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重復率就會降低,就很難引發集體失效的事件。
3、擊穿:滴水穿石
何為穿透:
1、對于一些設置了過期時間的key,如果這些key可能會在某些時間點被超高并發地訪問,是一種非?!盁狳c”的數據。
2、如果這個key在大量請求同時進來前正好失效,那么所有對這個key的數據查詢都落到db,我們稱為緩存擊穿。
解決方案:加鎖,大量并發只讓一個去查,其他人等待,查到以后釋放鎖,其他人獲取到鎖,先查緩存,就會有數據,不用去db
補充:之前用hystrix,做熔斷,降級,限流?,F在可以用阿里旗下的sentinel(接受過雙十一的洗禮)