了解什麼是 redis 的雪崩 穿透和擊穿?

2022-10-09 21:54:21 字數 1212 閱讀 6089

對於系統 a,假設每天高峰期每秒 5000 個請求,本來快取在高峰期可以扛住每秒 4000 個請求,但是快取機器意外發生了全盤宕機。快取掛了,此時 1 秒 5000 個請求全部落資料庫,資料庫必然扛不住,它會報一下警,然後就掛了。此時,如果沒有採用什麼特別的方案來處理這個故障,dba 很著急,重啟資料庫,但是資料庫立馬又被新的流量給打死了。

這就是快取雪崩。

大約在 3 年前,國內比較知名的乙個網際網路公司,曾因為快取事故,導致雪崩,後台系統全部崩潰,事故從當天下午持續到晚上凌晨 3~4 點,公司損失了幾千萬。

快取雪崩的事前事中事後的解決方案如下:

使用者傳送乙個請求,系統 a 收到請求後,先查本地 ehcache 快取,如果沒查到再查 redis。如果 ehcache 和 redis 都沒有,再查資料庫,將資料庫中的結果,寫入 ehcache 和 redis 中。

限流元件,可以設定每秒的請求,有多少能通過元件,剩餘的未通過的請求,怎麼辦?走降級!可以返回一些預設的值,或者友情提示,或者空白的值。

好處:對於系統a,假設一秒 5000 個請求,結果其中 4000 個請求是黑客發出的惡意攻擊。

黑客發出的那 4000 個攻擊,快取中查不到,每次你去資料庫里查,也查不到。

舉個栗子。資料庫 id 是從 1 開始的,結果黑客發過來的請求 id 全部都是負數。這樣的話,快取中不會有,請求每次都「視快取於無物」,直接查詢資料庫。這種惡意攻擊場景的快取穿透就會直接把資料庫給打死。

解決方式很簡單,每次系統 a 從資料庫中只要沒查到,就寫乙個空值到快取裡去,比如set -999 unknown。然後設定乙個過期時間,這樣的話,下次有相同的 key 來訪問的時候,在快取失效之前,都可以直接從快取中取資料。

快取擊穿,就是說某個 key 非常熱點,訪問非常頻繁,處於集中式高併發訪問的情況,當這個 key 在失效的瞬間,大量的請求就擊穿了快取,直接請求資料庫,就像是在一道屏障上鑿開了乙個洞。

不同場景下的解決方式可如下:

redis 什麼是雪崩 穿透 併發 預熱?

面試 你懂什麼是分布式系統嗎?redis分布式鎖都不會?資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫cpu和記憶體負載過高,甚至宕機。1 redis集群大面積故障 2 快取失效,但依然大量請求訪問快取服務redis 3 redis大量失效後,大量請求轉向...

什麼是redis的雪崩和穿透 擊穿

1.什麼是快取穿透 造成的原因 1.業務自身 或資料出現問題 2.一些惡意攻擊 爬蟲造成大量空的命中,此時會對資料庫造成很大壓力。解決方法 1.設定布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被這個bitmap攔截掉,從避免了對底層儲存系統的查詢壓力。2....

什麼是redis的雪崩和穿透 擊穿

一.穿透 1.什麼是快取穿透 造成的原因 1.業務自身 或資料出現問題 2.一些惡意攻擊 爬蟲造成大量空的命中,此時會對資料庫造成很大壓力。解決方法 1.設定布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被這個bitmap攔截掉,從避免了對底層儲存系統的查詢...