redis緩存穿透映胁,緩存擊穿木羹,緩存雪崩原因+解決方案

一、緩存穿透

緩存穿透是指查詢一個根本不存在的數(shù)據(jù)解孙,緩存層和持久層都不會命中汇跨。在日常工作中出于容錯的考慮,如果從持久層查不到數(shù)據(jù)則不寫入緩存層妆距,緩存穿透將導致不存在的數(shù)據(jù)每次請求都要到持久層去查詢,失去了緩存保護后端持久的意義函匕。

造成緩存穿透的基本原因有兩個娱据。第一,自身業(yè)務代碼或者數(shù)據(jù)出現(xiàn)問題(例如:set 和 get 的key不一致)盅惜,第二中剩,一些惡意攻擊、爬蟲等造成大量空命中(爬取線上商城商品數(shù)據(jù)抒寂,超大循環(huán)遞增商品的ID)结啼。

解決方案:

有很多種方法可以有效地解決緩存穿透問題,最常見的則是采用布隆過濾器屈芜,將所有可能存在的數(shù)據(jù)哈希到一個足夠大的bitmap中郊愧,一個一定不存在的數(shù)據(jù)會被 這個bitmap攔截掉,從而避免了對底層存儲系統(tǒng)的查詢壓力井佑。另外也有一個更為簡單粗暴的方法(我們采用的就是這種)属铁,如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障)躬翁,我們仍然把這個空結果進行緩存焦蘑,但它的過期時間會很短,最長不超過五分鐘盒发。


二例嘱、緩存雪崩

? ? ? ?由于緩存層承載著大量請求狡逢,有效地保護了存儲層,但是如果緩存層由于某些原因不可用(宕機)或者大量緩存由于超時時間相同在同一時間段失效(大批key失效/熱點數(shù)據(jù)失效)拼卵,大量請求直接到達存儲層奢浑,存儲層壓力過大導致系統(tǒng)雪崩。

解決方案:

1间学、可以把緩存層設計成高可用的殷费,即使個別節(jié)點、個別機器低葫、甚至是機房宕掉详羡,依然可以提供服務。利用sentinel或cluster實現(xiàn)嘿悬。

2实柠、采用多級緩存,本地進程作為一級緩存善涨,redis作為二級緩存窒盐,不同級別的緩存設置的超時時間不同,即使某級緩存過期了钢拧,也有其他級別緩存兜底蟹漓。

3、緩存的過期時間用隨機值源内,盡量讓不同的key的過期時間不同(例如:定時任務新建大批量key葡粒,設置的過期時間相同)。


三膜钓、緩存擊穿

當前key是一個熱點key(例如一個秒殺活動)嗽交,并發(fā)量非常大。key對應的數(shù)據(jù)存在颂斜,但在redis中過期夫壁,此時若有大量并發(fā)請求過來,這些請求發(fā)現(xiàn)緩存過期一般都會從后端DB加載數(shù)據(jù)并回設到緩存沃疮,這個時候大并發(fā)的請求可能會瞬間把后端DB壓垮盒让。

解決方案:

1、分布式鎖:只允許一個線程重建緩存司蔬,其他線程等待重建緩存的線程執(zhí)行完糯彬,重新從緩存獲取數(shù)據(jù)即可

2.?永不過期:

從緩存層面來看,確實沒有設置過期時間葱她,所以不會出現(xiàn)熱點key過期后產(chǎn)生的問題撩扒,也就是“物理”不過期。

從功能層面來看,為每個value設置一個邏輯過期時間搓谆,當發(fā)現(xiàn)超過邏輯過期時間后炒辉,會使用單獨的線程去更新緩。

2種方案對比:

分布式互斥鎖:這種方案思路比較簡單泉手,但是存在一定的隱患黔寇,如果在查詢數(shù)據(jù)庫 + 和 重建緩存(key失效后進行了大量的計算)時間過長,也可能會存在死鎖和線程池阻塞的風險斩萌,高并發(fā)情景下吞吐量會大大降低缝裤!但是這種方法能夠較好地降低后端存儲負載,并在一致性上做得比較好颊郎。

“永遠不過期”:這種方案由于沒有設置真正的過期時間憋飞,實際上已經(jīng)不存在熱點key產(chǎn)生的一系列危害,但是會存在數(shù)據(jù)不一致的情況姆吭,同時代碼復雜度會增大榛做。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市内狸,隨后出現(xiàn)的幾起案子检眯,更是在濱河造成了極大的恐慌,老刑警劉巖昆淡,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锰瘸,死亡現(xiàn)場離奇詭異,居然都是意外死亡昂灵,警方通過查閱死者的電腦和手機获茬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倔既,“玉大人,你說我怎么就攤上這事鹏氧〔秤浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵把还,是天一觀的道長实蓬。 經(jīng)常有香客問我,道長吊履,這世上最難降的妖魔是什么安皱? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮艇炎,結果婚禮上酌伊,老公的妹妹穿的比我還像新娘。我一直安慰自己居砖,他們只是感情好虹脯,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奏候,像睡著了一般循集。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔗草,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天咒彤,我揣著相機與錄音,去河邊找鬼咒精。 笑死镶柱,一個胖子當著我的面吹牛,可吹牛的內容都是我干的狠轻。 我是一名探鬼主播奸例,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼向楼!你這毒婦竟也來了查吊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤湖蜕,失蹤者是張志新(化名)和其女友劉穎逻卖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昭抒,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡评也,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灭返。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗迟。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熙含,靈堂內的尸體忽然破棺而出罚缕,到底是詐尸還是另有隱情,我是刑警寧澤怎静,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布邮弹,位于F島的核電站,受9級特大地震影響蚓聘,放射性物質發(fā)生泄漏腌乡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一夜牡、第九天 我趴在偏房一處隱蔽的房頂上張望与纽。 院中可真熱鬧,春花似錦、人聲如沸渣锦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袋毙。三九已至型檀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間听盖,已是汗流浹背胀溺。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皆看,地道東北人仓坞。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像腰吟,于是被迫代替她去往敵國和親无埃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容