緩存穿透稠茂,緩存擊穿尔店,緩存雪崩

1.緩存穿透

緩存穿透是指查詢一個(gè)一定不存在的數(shù)據(jù),由于緩存是在不命中時(shí)被動(dòng)寫入的,并且出于容錯(cuò)考慮嚣州,如果從存儲(chǔ)層查不到數(shù)據(jù)就不寫入緩存鲫售,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請求都要去存儲(chǔ)層查詢,這就失去了緩存的意義该肴。在流量大的時(shí)候情竹,就很有可能使得數(shù)據(jù)庫掛掉,要是有人利用不存在的key攻擊我們的應(yīng)用匀哄,這將成為漏洞秦效。

解決方案

采用布隆過濾器,將所有可能存在的數(shù)據(jù)利用多個(gè)hash函數(shù)存入一個(gè)非常大的bitmap中涎嚼,一個(gè)一定不存在的數(shù)據(jù)將會(huì)被攔截住阱州,從而避免造成底層數(shù)據(jù)庫的查詢壓力。另一個(gè)簡單粗暴的方法是法梯,如果一個(gè)查詢返回的數(shù)據(jù)為空苔货,我們?nèi)稳话堰@個(gè)空結(jié)果進(jìn)行緩存,但是他的過期時(shí)間會(huì)很短立哑,最長不超過5分鐘夜惭。

2.緩存雪崩

緩存雪崩是指在我們在設(shè)置緩存時(shí)采用了相同的過期時(shí)間,導(dǎo)致緩存會(huì)在某一個(gè)時(shí)刻同時(shí)失效铛绰,請求全部轉(zhuǎn)發(fā)到DB,導(dǎo)致DB壓力過重雪崩诈茧。

解決方案

緩存失效時(shí)的雪崩效應(yīng)對底層系統(tǒng)的沖擊非常可怕捂掰。大多數(shù)系統(tǒng)設(shè)計(jì)者考慮用加鎖或者隊(duì)列的方式保證緩存的單線 程(進(jìn)程)寫敢会,從而避免失效時(shí)大量的并發(fā)請求落到底層存儲(chǔ)系統(tǒng)上。這里分享一個(gè)簡單方案就時(shí)講緩存失效時(shí)間分散開这嚣,比如我們可以在原有的失效時(shí)間基礎(chǔ)上增加一個(gè)隨機(jī)值走触,比如1-5分鐘隨機(jī),這樣每一個(gè)緩存的過期時(shí)間的重復(fù)率就會(huì)

3.緩存擊穿

對于一些設(shè)置了過期時(shí)間的key疤苹,如果這些key可能會(huì)在某些時(shí)間點(diǎn)被超高并發(fā)地訪問互广,是一種非常“熱點(diǎn)”的數(shù)據(jù)卧土。這個(gè)時(shí)候惫皱,需要考慮一個(gè)問題:緩存被“擊穿”的問題,這個(gè)和緩存雪崩的區(qū)別在于這里針對某一key緩存尤莺,前者則是很多key旅敷。

解決方案

比較常用的做法,是使用mutex颤霎。簡單地來說媳谁,就是在緩存失效的時(shí)候(判斷拿出來的值為空)涂滴,不是立即去load db,而是先使用緩存工具的某些帶成功操作返回值的操作(比如Redis的SETNX或者M(jìn)emcache的ADD)去set一個(gè)mutex key晴音,當(dāng)操作返回成功時(shí)柔纵,再進(jìn)行l(wèi)oad db的操作并回設(shè)緩存;否則锤躁,就重試整個(gè)get緩存的方法搁料。

String get(String key){
    String value = redis.get(key);
    if(value == null){
        if(redis.setnx(key_mutex,"1)){
          redis.expire(key_mutex,3*60);
          value = db.get(key);
          redis.set(key,value);
          redis.delete(key_mutex);
        }else{
          Thread.sleep(50);
          get(key);
       }
    }
}

高并發(fā)下緩存擊穿的解決方案
http://hbxflihua.iteye.com/blog/2354414降低,就很難引發(fā)集體失效的事件系羞。
https://www.cnblogs.com/jinjiangongzuoshi/p/5240280.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郭计,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椒振,更是在濱河造成了極大的恐慌昭伸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎迎,死亡現(xiàn)場離奇詭異庐杨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嗡善,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來学歧,“玉大人罩引,你說我怎么就攤上這事≈Ρ浚” “怎么了袁铐?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長横浑。 經(jīng)常有香客問我剔桨,道長,這世上最難降的妖魔是什么徙融? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任洒缀,我火速辦了婚禮,結(jié)果婚禮上欺冀,老公的妹妹穿的比我還像新娘树绩。我一直安慰自己,他們只是感情好隐轩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布饺饭。 她就那樣靜靜地躺著,像睡著了一般职车。 火紅的嫁衣襯著肌膚如雪瘫俊。 梳的紋絲不亂的頭發(fā)上鹊杖,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音扛芽,去河邊找鬼骂蓖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胸哥,可吹牛的內(nèi)容都是我干的涯竟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼空厌,長吁一口氣:“原來是場噩夢啊……” “哼庐船!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘲更,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筐钟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赋朦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篓冲,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年宠哄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壹将。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毛嫉,死狀恐怖诽俯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情承粤,我是刑警寧澤暴区,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站辛臊,受9級特大地震影響仙粱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彻舰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一伐割、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刃唤,春花似錦口猜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辐真,卻和暖如春须尚,著一層夾襖步出監(jiān)牢的瞬間崖堤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工耐床, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留密幔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓撩轰,卻偏偏與公主長得像胯甩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子堪嫂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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