緩存穿透、緩存擊穿、緩存雪崩區別

一、緩存穿透

       緩存穿透是指緩存和數據庫中都沒有的數據,而用戶不斷髮起請求。(查詢一個一定不存在的數據。如資源表,查詢一個不存在的id,每次都會訪問DB,如果有人惡意破壞,很可能直接對DB造成影響。)

      解決方案:

      接口層增加校驗,如用戶鑑權校驗,id做基礎校驗。

       從緩存取不到的數據,在數據庫中也沒有取到,這時也可以將key-value對寫爲key-null,緩存有效時間可以設置短點,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反覆用同一個id暴力攻擊。

        將數據庫中所有的查詢條件,放到布隆過濾器中。當一個查詢請求來臨的時候,先經過布隆過濾器進行檢查,如果請求存在這個條件中,那麼繼續執行,如果不在,直接丟棄。

二、緩存擊穿

      緩存擊穿是指緩存中沒有但數據庫中有的數據(一般是緩存時間到期),這時由於併發用戶特別多,同時讀緩存沒讀到數據,又同時去數據庫去取數據,引起數據庫壓力瞬間增大,造成過大壓力

      解決方案:

      設置熱點數據永遠不過期。

      加互斥鎖。

      接口限流與熔斷、降級

三、緩存雪崩

      緩存雪崩是指緩存中數據大批量到過期時間,而查詢數據量巨大,引起數據庫壓力過大甚至down機。和緩存擊穿不同的是,緩存擊穿指併發查同一條數據,緩存雪崩是不同數據都過期了,很多數據都查不到從而查數據庫。

     解決方案:

     設置熱點數據永遠不過期。

    緩存數據的過期時間設置隨機,防止同一時間大量數據過期現象發生。

     分佈式部署緩存數據庫,則將熱點數據均勻分佈在不同搞得緩存數據庫中。
 

參考:https://blog.csdn.net/fanrenxiang/article/details/80542580
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章