緩存穿透、緩存擊穿、緩存雪崩及其解決方案

一、緩存穿透

描述

? ? ? ?緩存穿透是指數(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所示):

圖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ù)永不失效;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容