首頁常見問題正文

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

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

IT培訓班

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

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

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

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

  緩存穿透:

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

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

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

  緩存擊穿:

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

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

  緩存雪崩:

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

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

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

分享到:
在線咨詢 我要報名
和我們在線交談!