實例解讀什么是Redis緩存穿透、緩存雪崩和緩存擊穿

Redis緩存的使用甚带,極大的提升了應用程序的性能和效率她肯,特別是數(shù)據(jù)查詢方面佳头。但同時,它也帶來了一些問題晴氨。其中畜晰,最要害的問題,就是數(shù)據(jù)的一致性問題瑞筐,從嚴格意義上講凄鼻,這個問題無解。如果對數(shù)據(jù)的一致性要求很高聚假,那么就不能使用緩存块蚌。

另外的一些典型問題就是,緩存穿透膘格、緩存雪崩和緩存擊穿峭范。目前,業(yè)界也都有比較流行的解決方案瘪贱。本篇文章纱控,并不是要更加完美的解決這三個問題,也不是要顛覆業(yè)界流行的解決方案菜秦。而是甜害,從實際代碼操作,來演示這三個問題現(xiàn)象球昨。之所以要這么做尔店,是因為,僅僅看這些問題的學術解釋主慰,腦袋里很難有一個很形象的概念嚣州,有了實際的代碼演示,可以加深對這些問題的理解和認識共螺。

緩存穿透

緩存穿透该肴,是指查詢一個數(shù)據(jù)庫一定不存在的數(shù)據(jù)。正常的使用緩存流程大致是藐不,數(shù)據(jù)查詢先進行緩存查詢匀哄,如果key不存在或者key已經(jīng)過期,再對數(shù)據(jù)庫進行查詢佳吞,并把查詢到的對象拱雏,放進緩存。如果數(shù)據(jù)庫查詢對象為空底扳,則不放進緩存铸抑。

Redis緩存流程

代碼流程

參數(shù)傳入對象主鍵ID根據(jù)key從緩存中獲取對象如果對象不為空,直接返回如果對象為空衷模,進行數(shù)據(jù)庫查詢?nèi)绻麖臄?shù)據(jù)庫查詢出的對象不為空鹊汛,則放入緩存(設定過期時間)想象一下這個情況蒲赂,如果傳入的參數(shù)為-1,會是怎么樣刁憋?這個-1滥嘴,就是一定不存在的對象。就會每次都去查詢數(shù)據(jù)庫至耻,而每次查詢都是空若皱,每次又都不會進行緩存。假如有惡意攻擊尘颓,就可以利用這個漏洞走触,對數(shù)據(jù)庫造成壓力,甚至壓垮數(shù)據(jù)庫疤苹。即便是采用UUID互广,也是很容易找到一個不存在的KEY,進行攻擊卧土。

小編在工作中惫皱,會采用緩存空值的方式,也就是【代碼流程】中第5步尤莺,如果從數(shù)據(jù)庫查詢的對象為空旅敷,也放入緩存,只是設定的緩存過期時間較短缝裁,比如設置為60秒扫皱。

緩存空值

緩存雪崩

緩存雪崩,是指在某一個時間段捷绑,緩存集中過期失效。

產(chǎn)生雪崩的原因之一氢妈,比如在寫本文的時候粹污,馬上就要到雙十二零點,很快就會迎來一波搶購首量,這波商品時間比較集中的放入了緩存壮吩,假設緩存一個小時。那么到了凌晨一點鐘的時候加缘,這批商品的緩存就都過期了鸭叙。而對這批商品的訪問查詢,都落到了數(shù)據(jù)庫上拣宏,對于數(shù)據(jù)庫而言沈贝,就會產(chǎn)生周期性的壓力波峰。

小編在做電商項目的時候勋乾,一般是采取不同分類商品宋下,緩存不同周期嗡善。在同一分類中的商品,加上一個隨機因子学歧。這樣能盡可能分散緩存過期時間罩引,而且,熱門類目的商品緩存時間長一些枝笨,冷門類目的商品緩存時間短一些袁铐,也能節(jié)省緩存服務的資源。

緩存時間加入suijiyinzi

其實集中過期横浑,倒不是非常致命昭躺,比較致命的緩存雪崩,是緩存服務器某個節(jié)點宕機或斷網(wǎng)伪嫁。因為自然形成的緩存雪崩领炫,一定是在某個時間段集中創(chuàng)建緩存,那么那個時候數(shù)據(jù)庫能頂住壓力张咳,這個時候帝洪,數(shù)據(jù)庫也是可以頂住壓力的。無非就是對數(shù)據(jù)庫產(chǎn)生周期性的壓力而已脚猾。而緩存服務節(jié)點的宕機葱峡,對數(shù)據(jù)庫服務器造成的壓力是不可預知的,很有可能瞬間就把數(shù)據(jù)庫壓垮龙助。

緩存擊穿

緩存擊穿砰奕,是指一個key非常熱點,在不停的扛著大并發(fā)提鸟,大并發(fā)集中對這一個點進行訪問军援,當這個key在失效的瞬間,持續(xù)的大并發(fā)就穿破緩存称勋,直接請求數(shù)據(jù)庫胸哥,就像在一個屏障上鑿開了一個洞。

小編在做電商項目的時候赡鲜,把這貨就成為“爆款”空厌。

其實,大多數(shù)情況下這種爆款很難對數(shù)據(jù)庫服務器造成壓垮性的壓力银酬。達到這個級別的公司沒有幾家的嘲更。所以,務實主義的小編揩瞪,對主打商品都是早早的做好了準備赋朦,讓緩存永不過期。即便某些商品自己發(fā)酵成了爆款,也是直接設為永不過期就好了北发。

大道至簡纹因,mutex key互斥鎖真心用不上。

結束語

在流行的問題面前一定有流行的解決方案琳拨,但有時候瞭恰,也要根據(jù)自己的實際情況酌情處理。大膽設計狱庇,說不定你的解決方案就會被流行呢惊畏?

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市密任,隨后出現(xiàn)的幾起案子颜启,更是在濱河造成了極大的恐慌,老刑警劉巖浪讳,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缰盏,死亡現(xiàn)場離奇詭異,居然都是意外死亡淹遵,警方通過查閱死者的電腦和手機口猜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來透揣,“玉大人济炎,你說我怎么就攤上這事》妫” “怎么了须尚?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侍咱。 經(jīng)常有香客問我耐床,道長,這世上最難降的妖魔是什么放坏? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任咙咽,我火速辦了婚禮,結果婚禮上淤年,老公的妹妹穿的比我還像新娘。我一直安慰自己蜡豹,他們只是感情好麸粮,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镜廉,像睡著了一般弄诲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天齐遵,我揣著相機與錄音寂玲,去河邊找鬼。 笑死梗摇,一個胖子當著我的面吹牛拓哟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伶授,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼断序,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了糜烹?” 一聲冷哼從身側響起违诗,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疮蹦,沒想到半個月后诸迟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡愕乎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年阵苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妆毕。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡慎玖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笛粘,到底是詐尸還是另有隱情趁怔,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布薪前,位于F島的核電站润努,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏示括。R本人自食惡果不足惜铺浇,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垛膝。 院中可真熱鬧鳍侣,春花似錦、人聲如沸吼拥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿可。三九已至惑折,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惨驶。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工白热, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粗卜。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓屋确,卻偏偏與公主長得像,于是被迫代替她去往敵國和親休建。 傳聞我的和親對象是個殘疾皇子乍恐,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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