奧門網(wǎng)站建設(shè)東莞seo技術(shù)
擊穿、穿透、雪崩經(jīng)常聽人說吧? 那他到底是啥呢?無非就是在有緩存層的情況下,對各種繞過緩存層從而直接落到了DB上的情況進(jìn)行的分類。
概念性的東西大概如下,我是記不住,后期具體使用與規(guī)避這些問題才是大事,后面有機(jī)會更新吧。
- 擊穿(Cache Penetration)
定義: 擊穿是指請求的數(shù)據(jù)在緩存中永遠(yuǎn)找不到,導(dǎo)致請求直接落到數(shù)據(jù)庫上。這種情況通常是由于某些惡意請求或者程序錯誤導(dǎo)致的,請求的 key 本身是無效的,或者根本不存在。
原因:
惡意請求:攻擊者故意請求不存在的 key。
程序錯誤:代碼邏輯錯誤,生成了無效的 key。
解決方案:
布隆過濾器:使用布隆過濾器預(yù)先判斷 key 是否存在,如果布隆過濾器返回不存在,則直接返回空結(jié)果,不再查詢數(shù)據(jù)庫。
緩存空值:對于查詢不到的數(shù)據(jù),也緩存一個空值(例如 null),并設(shè)置一個較短的過期時間,防止頻繁查詢數(shù)據(jù)庫。
驗(yàn)證參數(shù):在接口層增加校驗(yàn),不合法的參數(shù)直接返回。
黑名單:設(shè)定一個合理的閾值,當(dāng)某個IP的請求次數(shù)超過閾值時,將其加入黑名單,限制其訪問頻率或直接拒絕其請求。 - 穿透(Cache Miss)
定義: 穿透是指緩存中某個 key 失效或被刪除,導(dǎo)致請求繞過緩存層直接訪問數(shù)據(jù)庫。這種情況通常是正常的緩存過期或緩存被主動刪除導(dǎo)致的。
原因:
緩存過期:緩存中的數(shù)據(jù)超過了設(shè)定的過期時間。
主動刪除:緩存中的數(shù)據(jù)被主動刪除,例如在更新數(shù)據(jù)庫后刪除緩存。
解決方案:
緩存預(yù)熱:在系統(tǒng)啟動時或定期預(yù)熱緩存,提前加載常用數(shù)據(jù)。
異步加載:當(dāng)緩存未命中時,可以異步加載數(shù)據(jù)并更新緩存,避免所有請求同時訪問數(shù)據(jù)庫。 - 雪崩(Cache Avalanche)
定義: 雪崩是指大量緩存 key 同時失效,導(dǎo)致大量請求同時繞過緩存層直接訪問數(shù)據(jù)庫,造成數(shù)據(jù)庫壓力劇增,甚至崩潰。這種情況通常是由于緩存過期時間設(shè)置不合理或突發(fā)的高并發(fā)請求導(dǎo)致的。
原因:
緩存過期時間集中:多個緩存 key 設(shè)置了相同的過期時間,導(dǎo)致同時失效。
突發(fā)高并發(fā):短時間內(nèi)大量請求同時訪問數(shù)據(jù)庫。
解決方案:
隨機(jī)過期時間:為緩存 key 設(shè)置隨機(jī)的過期時間,避免大量 key 同時失效。
限流降級:在高并發(fā)情況下,使用限流和降級策略,限制請求頻率,保護(hù)數(shù)據(jù)庫。
緩存預(yù)熱:在系統(tǒng)啟動時或定期預(yù)熱緩存,提前加載常用數(shù)據(jù)。
多級緩存:使用多級緩存策略,例如本地緩存 + 分布式緩存,減少對數(shù)據(jù)庫的直接訪問。
個人理解
- 擊穿: 請求的數(shù)據(jù)在緩存里永遠(yuǎn)找不到,請求繞過緩存層
- 穿透:部分key失效或被刪除,請求繞過緩存層
- 雪崩:所有緩存key同時失效,所有請求全部繞過緩存層