緩存擊穿谋右、失效及熱點key問題


分布式緩存是網(wǎng)站服務(wù)端經(jīng)常用到的一種技術(shù)硬猫,在讀多寫少的業(yè)務(wù)場景中,通過使用緩存可以有效地支撐高并發(fā)的訪問量改执,對后端的數(shù)據(jù)庫等數(shù)據(jù)源做到很好地保護⌒ッ郏現(xiàn)在市面上有很多分布式緩存,比如Redis辈挂、Memcached以及阿里的Tair等衬横,不管我們使用的哪種緩存產(chǎn)品,基本上都會遇到緩存擊穿终蒂、緩存失效以及熱點key的問題蜂林。如何有效地防止這些問題,也是我們在享受緩存帶來的紅利地同時后豫,必須要解決地難題悉尾。

通常我們在使用緩存時候都是先檢查緩存中是否存在,如果存在直接返回緩存內(nèi)容挫酿,如果不存在就直接查詢數(shù)據(jù)庫然后再緩存查詢結(jié)果返回构眯,例如下圖所示,

常見緩存設(shè)計

緩存擊穿:

描述

查詢一個數(shù)據(jù)庫中不存在的數(shù)據(jù)早龟,比如商品詳情惫霸,查詢一個不存在的ID,每次都會訪問DB葱弟,如果有人惡意破壞壹店,很可能直接對DB造成過大地壓力。

解決方案:

當(dāng)通過某一個key去查詢數(shù)據(jù)的時候芝加,如果對應(yīng)在數(shù)據(jù)庫中的數(shù)據(jù)都不存在硅卢,我們將此key對應(yīng)的value設(shè)置為一個默認的值,比如“NULL”,并設(shè)置一個緩存的失效時間将塑,這時在緩存失效之前脉顿,所有通過此key的訪問都被緩存擋住了。后面如果此key對應(yīng)的數(shù)據(jù)在DB中存在時点寥,緩存失效之后艾疟,通過此key再去訪問數(shù)據(jù),就能拿到新的value了敢辩。

緩存失效:

描述

在高并發(fā)的環(huán)境下蔽莱,如果此時key對應(yīng)的緩存失效,此時有多個進程就會去同時去查詢DB戚长,然后再去同時設(shè)置緩存盗冷。這個時候如果這個key是系統(tǒng)中的熱點key或者同時失效的數(shù)量比較多時,DB訪問量會瞬間增大历葛,造成過大的壓力正塌。

解決方案:

將系統(tǒng)中key的緩存失效時間均勻地錯開,防止統(tǒng)一時間點有大量的key對應(yīng)的緩存失效恤溶;
重新設(shè)計緩存的使用方式,當(dāng)我們通過key去查詢數(shù)據(jù)時帜羊,首先查詢緩存咒程,如果此時緩存中查詢不到,就通過分布式鎖進行加鎖讼育,取得鎖的進程查DB并設(shè)置緩存帐姻,然后解鎖;其他進程如果發(fā)現(xiàn)有鎖就等待奶段,然后等解鎖后返回緩存數(shù)據(jù)或者再次查詢DB饥瓷。

熱點key:

描述

緩存中的某些Key(可能對應(yīng)用與某個促銷商品)對應(yīng)的value存儲在集群中一臺機器,使得所有流量涌向同一機器痹籍,成為系統(tǒng)的瓶頸呢铆,該問題的挑戰(zhàn)在于它無法通過增加機器容量來解決。

解決方案:

客戶端熱點key緩存:將熱點key對應(yīng)value并緩存在客戶端本地蹲缠,并且設(shè)置一個失效時間棺克。對于每次讀請求,將首先檢查key是否存在于本地緩存中线定,如果存在則直接返回娜谊,如果不存在再去訪問分布式緩存的機器。
將熱點key分散為多個子key斤讥,然后存儲到緩存集群的不同機器上纱皆,這些子key對應(yīng)的value都和熱點key是一樣的。當(dāng)通過熱點key去查詢數(shù)據(jù)時,通過某種hash算法隨機選擇一個子key派草,然后再去訪問緩存機器撑帖,將熱點分散到了多個子key上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澳眷,一起剝皮案震驚了整個濱河市胡嘿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钳踊,老刑警劉巖衷敌,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拓瞪,居然都是意外死亡缴罗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門祭埂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來面氓,“玉大人,你說我怎么就攤上這事蛆橡∩嘟纾” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵泰演,是天一觀的道長呻拌。 經(jīng)常有香客問我,道長睦焕,這世上最難降的妖魔是什么藐握? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮垃喊,結(jié)果婚禮上猾普,老公的妹妹穿的比我還像新娘。我一直安慰自己本谜,他們只是感情好初家,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耕突,像睡著了一般笤成。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眷茁,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天炕泳,我揣著相機與錄音,去河邊找鬼上祈。 笑死培遵,一個胖子當(dāng)著我的面吹牛浙芙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籽腕,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嗡呼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了皇耗?” 一聲冷哼從身側(cè)響起南窗,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郎楼,沒想到半個月后万伤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡呜袁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年敌买,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阶界。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡虹钮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膘融,到底是詐尸還是另有隱情芙粱,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布托启,位于F島的核電站宅倒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屯耸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一蹭劈、第九天 我趴在偏房一處隱蔽的房頂上張望疗绣。 院中可真熱鬧,春花似錦铺韧、人聲如沸多矮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塔逃。三九已至,卻和暖如春料仗,著一層夾襖步出監(jiān)牢的瞬間湾盗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工立轧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留格粪,地道東北人躏吊。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像帐萎,于是被迫代替她去往敵國和親比伏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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