Redis快取穿透 快取擊穿 快取雪崩 解決方案

2021-10-10 15:51:55 字數 582 閱讀 4428

快取穿透:不斷請求快取和資料庫中都沒有的資料。

黑客可以通過快取穿透使資料庫負載過大被壓垮,資料庫伺服器宕機。

解決方案:

校驗請求。如使用者id小於0,直接返回使用者不存在。

設定key的value為"null"。有效時長設定較小值,如30秒,防止資料庫中插入了資料,但快取不及時更新。

利用布隆過濾器判斷請求的資料是否存在。如布隆過濾器中儲存使用者id,判斷使用者id是否存在。

快取擊穿:大量併發請求快取中沒有但資料庫中有的資料。

解決方案:

熱點資料不過期。(固定的資料,比如微博熱點新聞)

服務限流、熔斷、降級。

加互斥鎖。乙個請求從資料庫讀資料,其他讀相同資料的請求被阻塞,等待從快取讀資料。

快取雪崩:快取中大量資料過期,總的請求量也大。

解決方案:

熱點資料不過期。

快取過期時間隨機,防止大量資料同時過期。

分庫分表可以降低庫、表的訪問負載。可以分庫(資料分片)後配套相應的redis。

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

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

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

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

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

指的是,redis快取中和資料庫中都沒有的資料,使用者不斷向伺服器發起請求,導致資料庫壓力過大。一般的流程查詢流程存在redis快取穿透bug 沒獲取到資料,到資料庫中查詢 如果一直沒獲取和查詢到資料,使用者不斷發起請求,資料庫就會不斷地進行查詢操作,導致資料庫壓力增大,導致快取擊穿。解決方案 阻止...