指的是,redis快取中和資料庫中都沒有的資料,使用者不斷向伺服器發起請求,導致資料庫壓力過大。
一般的流程查詢流程存在redis快取穿透bug:
沒獲取到資料,到資料庫中查詢
如果一直沒獲取和查詢到資料,使用者不斷發起請求,資料庫就會不斷地進行查詢操作,導致資料庫壓力增大,導致快取擊穿。
解決方案
阻止程式內沒有使用過的key進入程式流程,避免惡意訪問。(例如:不使用負數key,則拒絕key < 0訪問)
redis快取中、資料庫中沒有查詢到的資料,將其存入快取,並標記(賦值value)乙個不被使用的值。(例如:0)讓其下一次訪問直接返回乙個「無效的值」,避免用同乙個無效key重複訪問程式。
使用預熱快取,當資料發生變更時,再將資料庫中的資料更新到快取。當快取中沒有的資料,我們就不再去向資料庫查詢。
快取擊穿是指快取中沒有但資料庫中有的資料。這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大。
解決方案
設定熱點資料永不過期。
使用快取預熱
快取雪崩是指快取中大量資料同時過期,查詢的資料量巨大,導致資料庫壓力瞬間增加。
與快取擊穿的區別:
解決方案
快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
設定熱點資料永不過期。
使用快取預熱。
Redis 快取穿透 快取擊穿 快取雪崩
快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為小於0的資料或id為特別大等不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。舉例 通過分類id查詢廣告集合 param categoryid 廣告分類id return 廣告集合 public listf...
Redis快取穿透 快取擊穿 快取雪崩
4 總結 一般企業都會用到mysql等關係型資料庫,當訪問量不大的時候還可以支撐 當併發量高的時候,比如商品搶購或者主頁訪問瞬間較大的時候,請求直接到達db,可能會導致系統效能急劇下降以致癱瘓。db是面向磁碟的,磁碟io是比較重的操作,效能較低。為了克服上述的問題,通常需要在客戶端和db之間引入一層...
REDIS快取雪崩 快取穿透 快取擊穿
快取雪崩 同一時刻有大量key失效,導致大量請求到資料庫 解決方案1 key失效時間加上隨機值,或者更高階的演算法分散失效時間。解決方案2 沒有資料時也cache下,過期時間可設定短點,不把過多請求打到db去 快取穿透 當查詢redis中沒有的資料時,該查詢會下沉到資料庫層,同時資料庫層也沒有該資料...