一、緩存穿透:
描述:
? ? ? ?緩存穿透是指數(shù)據(jù)在緩存和數(shù)據(jù)庫中都沒有的現(xiàn)象。若不斷發(fā)起請求,如id為 “-1” 的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù),這時的用戶很可能是攻擊者,攻擊會導(dǎo)致數(shù)據(jù)庫壓力過大。
解決方案:
(1)接口層增加校驗,id<=0的直接攔截;
(2)從緩存取不到的數(shù)據(jù),在數(shù)據(jù)庫中也沒有取到,這時也可以將key-value對緩存為key-null,有效時間可以設(shè)置稍短,如30秒(設(shè)置太長會導(dǎo)致正常情況也沒法使用)。這樣可以防止攻擊用戶反復(fù)用同一個id暴力攻擊。
二、緩存擊穿:
描述:
? ? ? ? 緩存擊穿是指數(shù)據(jù)在緩存中沒有但存在于數(shù)據(jù)庫中的現(xiàn)象(一般是緩存到期)。此時若有大量并發(fā)請求過來,由于緩存中沒有數(shù)據(jù),只能轉(zhuǎn)而去數(shù)據(jù)庫獲取,造成數(shù)據(jù)庫服務(wù)器壓力瞬間劇增。
解決方案:
(1)設(shè)置熱點數(shù)據(jù)永不過期;
(2)引入互斥鎖(如圖1所示):

三、緩存雪崩:
描述:
????????緩存雪崩是指緩存中大量數(shù)據(jù)到達(dá)過期時間,使得瞬間訪問數(shù)據(jù)庫的請求劇增,導(dǎo)致數(shù)據(jù)庫服務(wù)器壓力過大甚至宕機(jī)的現(xiàn)象。和緩存擊穿不同的是,緩存雪崩是因為大量數(shù)據(jù)同時過期,而緩存擊穿是因為某一時刻大量請求去獲取同一數(shù)據(jù)。
解決方案:
(1)給緩存過期時間加上隨機(jī)因子,避免數(shù)據(jù)大面積失效 或 統(tǒng)一規(guī)劃有效期,使得失效時間均勻分布;
(2)如果緩存數(shù)據(jù)庫分布式部署,考慮將熱點數(shù)據(jù)均勻分布在不同緩存數(shù)據(jù)庫中;
(3)配置二級緩存;
(4)設(shè)置熱點數(shù)據(jù)永不失效;