首頁常見問題正文

什么是緩存的穿透,擊穿,雪崩?遇到這三種情況要怎么解決?

更新時(shí)間:2023-03-09 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  緩存穿透(Cache Penetration)指的是查詢一個(gè)不存在的數(shù)據(jù),由于緩存沒有命中,請(qǐng)求會(huì)直接穿透到數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫壓力過大,甚至可能造成宕機(jī)。

  緩存擊穿(Cache Miss)指的是某一個(gè)熱點(diǎn)key在緩存中過期或者被清除,此時(shí)大量請(qǐng)求涌入,由于緩存中沒有該key的緩存數(shù)據(jù),請(qǐng)求會(huì)直接穿透到數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫壓力過大,甚至可能造成宕機(jī)。

  緩存雪崩(Cache Avalanche)指的是緩存中大量的數(shù)據(jù)在同一時(shí)間過期失效,導(dǎo)致大量的請(qǐng)求涌入數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫壓力過大,甚至可能造成宕機(jī)。

  以下是針對(duì)這三種情況的解決方法:

  緩存穿透:

  ·在應(yīng)用程序中添加合適的校驗(yàn)機(jī)制,過濾掉不存在的key,如將所有請(qǐng)求數(shù)據(jù)的唯一標(biāo)識(shí)符(如id)通過一個(gè)哈希函數(shù)映射為一個(gè)固定的字符串,并判斷字符串是否合法。

  ·對(duì)于查詢結(jié)果為空的情況,可以將其緩存到緩存中,但是有效期較短,比如5分鐘,防止惡意攻擊。

1678328343141_什么是緩存穿透、擊穿、雪崩.jpg

  緩存擊穿:

  ·使用互斥鎖或分布式鎖,防止大量請(qǐng)求同時(shí)訪問數(shù)據(jù)庫。

  ·使用熱點(diǎn)數(shù)據(jù)預(yù)加載,即在緩存過期之前,提前異步地加載數(shù)據(jù),確保緩存一直有數(shù)據(jù)。

  緩存雪崩:

  ·使用不同的過期時(shí)間,避免大量的數(shù)據(jù)在同一時(shí)間過期失效。

  ·使用緩存的異步刷新機(jī)制,保證緩存中的數(shù)據(jù)不會(huì)同時(shí)過期失效。

  ·使用多級(jí)緩存,如本地緩存、分布式緩存和全局緩存,使得緩存的失效不會(huì)同時(shí)影響所有緩存節(jié)點(diǎn)。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!