了解什么是 redis 的雪崩、穿透和擊穿礁凡?redis 崩潰之后會怎么樣吨艇?系統(tǒng)該如何應(yīng)對這種情況欲账?如何處理 redis 的穿透?

原文出處:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md
歡迎 star 關(guān)注 GitHub 項目最新動態(tài)返劲!

面試題

了解什么是 redis 的雪崩塞淹、穿透和擊穿窟蓝?redis 崩潰之后會怎么樣?系統(tǒng)該如何應(yīng)對這種情況饱普?如何處理 redis 的穿透运挫?

面試官心理分析

其實這是問到緩存必問的,因為緩存雪崩和穿透套耕,是緩存最大的兩個問題谁帕,要么不出現(xiàn),一旦出現(xiàn)就是致命性的問題冯袍,所以面試官一定會問你匈挖。

面試題剖析

緩存雪崩

對于系統(tǒng) A碾牌,假設(shè)每天高峰期每秒 5000 個請求,本來緩存在高峰期可以扛住每秒 4000 個請求儡循,但是緩存機(jī)器意外發(fā)生了全盤宕機(jī)舶吗。緩存掛了,此時 1 秒 5000 個請求全部落數(shù)據(jù)庫择膝,數(shù)據(jù)庫必然扛不住誓琼,它會報一下警,然后就掛了肴捉。此時腹侣,如果沒有采用什么特別的方案來處理這個故障,DBA 很著急每庆,重啟數(shù)據(jù)庫筐带,但是數(shù)據(jù)庫立馬又被新的流量給打死了。

這就是緩存雪崩缤灵。

redis-caching-avalanche.png

大約在 3 年前伦籍,國內(nèi)比較知名的一個互聯(lián)網(wǎng)公司,曾因為緩存事故腮出,導(dǎo)致雪崩帖鸦,后臺系統(tǒng)全部崩潰,事故從當(dāng)天下午持續(xù)到晚上凌晨 3~4 點胚嘲,公司損失了幾千萬作儿。

緩存雪崩的事前事中事后的解決方案如下。

  • 事前:redis 高可用馋劈,主從+哨兵攻锰,redis cluster,避免全盤崩潰妓雾。
  • 事中:本地 ehcache 緩存 + hystrix 限流&降級娶吞,避免 MySQL 被打死。
  • 事后:redis 持久化械姻,一旦重啟妒蛇,自動從磁盤上加載數(shù)據(jù),快速恢復(fù)緩存數(shù)據(jù)楷拳。
redis-caching-avalanche-solution.png

用戶發(fā)送一個請求绣夺,系統(tǒng) A 收到請求后,先查本地 ehcache 緩存欢揖,如果沒查到再查 redis陶耍。如果 ehcache 和 redis 都沒有,再查數(shù)據(jù)庫浸颓,將數(shù)據(jù)庫中的結(jié)果物臂,寫入 ehcache 和 redis 中旺拉。

限流組件,可以設(shè)置每秒的請求棵磷,有多少能通過組件蛾狗,剩余的未通過的請求,怎么辦仪媒?走降級沉桌!可以返回一些默認(rèn)的值,或者友情提示算吩,或者空白的值留凭。

好處:

  • 數(shù)據(jù)庫絕對不會死,限流組件確保了每秒只有多少個請求能通過偎巢。
  • 只要數(shù)據(jù)庫不死蔼夜,就是說,對用戶來說压昼,2/5 的請求都是可以被處理的求冷。
  • 只要有 2/5 的請求可以被處理,就意味著你的系統(tǒng)沒死窍霞,對用戶來說匠题,可能就是點擊幾次刷不出來頁面,但是多點幾次但金,就可以刷出來一次韭山。

緩存穿透

對于系統(tǒng)A,假設(shè)一秒 5000 個請求冷溃,結(jié)果其中 4000 個請求是黑客發(fā)出的惡意攻擊钱磅。

黑客發(fā)出的那 4000 個攻擊,緩存中查不到似枕,每次你去數(shù)據(jù)庫里查续搀,也查不到。

舉個栗子菠净。數(shù)據(jù)庫 id 是從 1 開始的,結(jié)果黑客發(fā)過來的請求 id 全部都是負(fù)數(shù)彪杉。這樣的話毅往,緩存中不會有,請求每次都“視緩存于無物”派近,直接查詢數(shù)據(jù)庫攀唯。這種惡意攻擊場景的緩存穿透就會直接把數(shù)據(jù)庫給打死。

redis-caching-penetration.png

解決方式很簡單渴丸,每次系統(tǒng) A 從數(shù)據(jù)庫中只要沒查到侯嘀,就寫一個空值到緩存里去另凌,比如 set -999 UNKNOWN。然后設(shè)置一個過期時間戒幔,這樣的話吠谢,下次有相同的 key 來訪問的時候,在緩存失效之前诗茎,都可以直接從緩存中取數(shù)據(jù)工坊。

緩存擊穿

緩存擊穿,就是說某個 key 非常熱點敢订,訪問非常頻繁王污,處于集中式高并發(fā)訪問的情況,當(dāng)這個 key 在失效的瞬間楚午,大量的請求就擊穿了緩存昭齐,直接請求數(shù)據(jù)庫,就像是在一道屏障上鑿開了一個洞矾柜。

解決方式也很簡單阱驾,可以將熱點數(shù)據(jù)設(shè)置為永遠(yuǎn)不過期;或者基于 redis or zookeeper 實現(xiàn)互斥鎖把沼,等待第一個請求構(gòu)建完緩存之后啊易,再釋放鎖,進(jìn)而其它請求才能通過該 key 訪問數(shù)據(jù)饮睬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末租谈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捆愁,更是在濱河造成了極大的恐慌割去,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼丑,死亡現(xiàn)場離奇詭異呻逆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菩帝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門咖城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呼奢,你說我怎么就攤上這事宜雀。” “怎么了握础?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵辐董,是天一觀的道長。 經(jīng)常有香客問我禀综,道長简烘,這世上最難降的妖魔是什么苔严? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮孤澎,結(jié)果婚禮上届氢,老公的妹妹穿的比我還像新娘。我一直安慰自己亥至,他們只是感情好悼沈,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姐扮,像睡著了一般絮供。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茶敏,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天壤靶,我揣著相機(jī)與錄音,去河邊找鬼惊搏。 笑死贮乳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恬惯。 我是一名探鬼主播向拆,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酪耳!你這毒婦竟也來了浓恳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤碗暗,失蹤者是張志新(化名)和其女友劉穎颈将,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體言疗,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晴圾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了噪奄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片死姚。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勤篮,靈堂內(nèi)的尸體忽然破棺而出知允,到底是詐尸還是另有隱情,我是刑警寧澤叙谨,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站保屯,受9級特大地震影響手负,放射性物質(zhì)發(fā)生泄漏涤垫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一竟终、第九天 我趴在偏房一處隱蔽的房頂上張望蝠猬。 院中可真熱鬧,春花似錦统捶、人聲如沸榆芦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匆绣。三九已至,卻和暖如春什黑,著一層夾襖步出監(jiān)牢的瞬間崎淳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工愕把, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留拣凹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓恨豁,卻偏偏與公主長得像嚣镜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子橘蜜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容