更新時間:2023-03-09 來源:黑馬程序員 瀏覽量:
緩存穿透(Cache Penetration)指的是查詢一個不存在的數據,由于緩存沒有命中,請求會直接穿透到數據庫,導致數據庫壓力過大,甚至可能造成宕機。
緩存擊穿(Cache Miss)指的是某一個熱點key在緩存中過期或者被清除,此時大量請求涌入,由于緩存中沒有該key的緩存數據,請求會直接穿透到數據庫,導致數據庫壓力過大,甚至可能造成宕機。
緩存雪崩(Cache Avalanche)指的是緩存中大量的數據在同一時間過期失效,導致大量的請求涌入數據庫,導致數據庫壓力過大,甚至可能造成宕機。
以下是針對這三種情況的解決方法:
·在應用程序中添加合適的校驗機制,過濾掉不存在的key,如將所有請求數據的唯一標識符(如id)通過一個哈希函數映射為一個固定的字符串,并判斷字符串是否合法。
·對于查詢結果為空的情況,可以將其緩存到緩存中,但是有效期較短,比如5分鐘,防止惡意攻擊。
·使用互斥鎖或分布式鎖,防止大量請求同時訪問數據庫。
·使用熱點數據預加載,即在緩存過期之前,提前異步地加載數據,確保緩存一直有數據。
·使用不同的過期時間,避免大量的數據在同一時間過期失效。
·使用緩存的異步刷新機制,保證緩存中的數據不會同時過期失效。
·使用多級緩存,如本地緩存、分布式緩存和全局緩存,使得緩存的失效不會同時影響所有緩存節(jié)點。