Redis的快取穿透 快取擊穿 快取雪崩

2021-08-28 06:41:56 字數 521 閱讀 1850

一.快取穿透

條件:訪問乙個不存在的資料

說明:當訪問乙個不存在的資料時,因為快取中沒有這個key,導致快取形同虛設.最終訪問後台資料庫.但是資料庫中沒有該資料所以返回null.

隱患:如果有人惡意頻繁查詢乙個不存在的資料,可能會導致資料庫負載高導致宕機.

總結:業務系統訪問乙個不存在的資料,稱之為快取穿透.

二.快取擊穿

條件:當快取key失效/過期/未命中時,高併發訪問該key

說明:如果給乙個key設定了失效時間,當key失效時有一萬的併發請求訪問這個key,這時快取失效,所有的請求都會訪問後台資料庫.稱之為快取擊穿.

場景:微博熱點訊息訪問量很大,如果該快取失效則會直接訪問後台資料庫,導致資料庫負載過高.

三.快取雪崩

前提:高併發訪問,快取命中較低或者失效時

說明:假設快取都設定了失效時間,在同一時間內快取大量失效.如果這時使用者高併發訪問.快取命中率過低.導致全部的使用者訪問都會訪問後台真實的資料庫.

場景:在高併發條件下.快取動態更新時

Redis快取穿透,穿透擊穿,快取雪崩

乙個一定不存在快取及查詢不到的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bit...

Redis 快取穿透 快取擊穿 快取雪崩

快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為小於0的資料或id為特別大等不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。舉例 通過分類id查詢廣告集合 param categoryid 廣告分類id return 廣告集合 public listf...

Redis快取穿透 快取擊穿 快取雪崩

4 總結 一般企業都會用到mysql等關係型資料庫,當訪問量不大的時候還可以支撐 當併發量高的時候,比如商品搶購或者主頁訪問瞬間較大的時候,請求直接到達db,可能會導致系統效能急劇下降以致癱瘓。db是面向磁碟的,磁碟io是比較重的操作,效能較低。為了克服上述的問題,通常需要在客戶端和db之間引入一層...