Redis穿透與雪崩

2021-10-14 09:33:21 字數 929 閱讀 9876

查詢的邏輯邏如下圖所示。

1:查詢redis,資料存在直接返回。

2:如資料不存在則查資料庫,然後存入快取然後再返回。

如果,查的資料在redis不存在。redis將去掃整個redis庫,最後沒找到這條資料返回空。這個過程叫做redis穿透

那麼redis穿透有什麼問題?

1:redis穿透查詢的耗時更久。

2:redis穿透後,將繼續去查db。

redis的qps可以達到5000,而mysql bd的qps是200左右。

倘若同一時間裡超過1000的併發穿透。redis輕鬆頂過壓力,把查詢轉到db,而db的qps差太遠了,可能會導致db響應不過來,直至宕機。然後一系列連鎖反應,最後整個系統崩潰。這個過程就是redis雪崩。

1:快取大批量同時過期。

**解決辦法:**快取過期時間可以加個隨機數(例如1~5分鐘),避免大批量同時到期。

2:惡意多併發查詢,查乙個redis 與資料庫都不存在資料。

**解決辦法:**解決的法辦比較多,以下選其1,2配合使用更好。

1):查詢不存在key後,在資料庫查詢也不存在的時候,插入redis一條空的資料。避免下次再查的時候,又redis穿透。

2):可以使用布隆過濾器,過濾掉一些無效的查詢。

3):路由過濾,限制同一ip過度訪問。

3:redis 宕機,導致直接查db。

解決辦法:redis高可用,集群方案可以參考 redis集群。

一般雪崩後,需要先啟動redis,然後加入熱資料,避免一啟動又再次穿透,然後再次雪崩。

redis 快取穿透與快取雪崩

快取穿透 快取系統,按照 key去查詢 value,當key 對應的value 一定不存在的時候並對 key併發請求量很大的時候,就會對後端造成很大的壓力。如何避免 1.對查詢機構為空的情況也進行快取,快取的時間設定端一點,或者對該 key對應的資料 insert 之後清理快取。2.對一定不存在的 ...

redis的雪崩,擊穿與穿透

redis的雪崩 例如在雙11期間,大量內容從存放在redis進行快取,但存放在redis的內容有過期時間,到過期時間後,快取內的大量資料失效,大量請求進入到資料庫,導致資料庫相應不及時,發生雪崩。解決方案 設定快取的失效時間,不讓快取都在同一時間失效,在使用快取同時初始化快取 對redis進行集群...

Redis雪崩和Redis穿透

redis雪崩 查詢時redis沒有資料本來先從redis裡面查某個資料 但是redis中這個資料剛好被刪除了,還沒來得及更新 一瞬間很多請求直接進入了mysql進行查詢 而mysql承受不了太大壓力,就會出現雪崩redis穿透 跳過我們預想的資料本來先從redis裡面查某個資料 但是redis中沒...