緩存穿透贪磺、緩存擊穿、緩存雪崩區(qū)別

使用redis的原因
性能和并發(fā)

一.緩存穿透

緩存穿透的概念很簡單诅愚,用戶想要查詢一個數(shù)據(jù)缘挽,發(fā)現(xiàn)緩存沒有命中,于是向持久層數(shù)據(jù)庫查詢呻粹。發(fā)現(xiàn)也沒有壕曼,于是本次查詢失敗。當用戶很多的時候等浊,緩存都沒有命中腮郊,于是都去請求了持久層數(shù)據(jù)庫。這會給持久層數(shù)據(jù)庫造成很大的壓力筹燕,這時候就相當于出現(xiàn)了緩存穿透轧飞。

解決方案:

1.簡單校驗

因為有時候可能是攻擊者故意拿不存在的id攻擊,可以在接口處添加基礎(chǔ)校驗撒踪,對不可能出現(xiàn)的數(shù)據(jù)進行攔截过咬。

2.緩存空對象

從緩存取不到的數(shù)據(jù),在數(shù)據(jù)庫中也沒有取到制妄,這時也可以將key-value對寫為key-null掸绞,同時設(shè)置一個過期時間,也就是緩存有效時間耕捞,如30秒(設(shè)置太長會導(dǎo)致正常情況也沒法使用)衔掸。之后再訪問這個數(shù)據(jù)將會從緩存中獲取,保護了后端數(shù)據(jù)源俺抽;也可以防止攻擊用戶在短時間反復(fù)用同一個id暴力攻擊敞映。
但是這種方法會存在兩個問題:
1.如果空值能夠被緩存起來,這就意味著緩存需要更多的空間存儲更多的鍵磷斧,因為這當中可能會有很多的空值的鍵振愿;
2.即使對空值設(shè)置了過期時間,還是會存在緩存層和存儲層的數(shù)據(jù)會有一段時間窗口的不一致弛饭,這對于需要保持一致性的業(yè)務(wù)會有影響冕末。

3.布隆過濾器bloomfilter

當大量訪問不存在數(shù)據(jù)的請求到達時,先用布隆過濾器過濾孩哑,避免直接去查庫栓霜,也就是說布隆過濾器只能判斷數(shù)據(jù)是否一定不存在翠桦,而無法判斷數(shù)據(jù)是否一定存在横蜒。是有誤判率的問題的胳蛮。

二、緩存擊穿

某一個熱點 key丛晌,在緩存過期的一瞬間仅炊,同時有大量的請求打進來,由于此時緩存過期了澎蛛,所以請求最終都會走到數(shù)據(jù)庫抚垄,造成瞬時數(shù)據(jù)庫請求量大、壓力驟增谋逻,甚至可能打垮數(shù)據(jù)庫呆馁。

解決方案:

1.互斥鎖

在并發(fā)的多個請求中,只有第一個請求線程能拿到鎖并執(zhí)行數(shù)據(jù)庫查詢操作毁兆,其他的線程拿不到鎖就阻塞等著浙滤,等到第一個線程將數(shù)據(jù)寫入緩存后,直接走緩存气堕。
簡化代碼如下:


image.png

這里用到了JVM鎖:ReentrantLock纺腊。
分布式中一般會使用redis實現(xiàn)分布式鎖。

單臺服務(wù)器時也可以考慮用JVM鎖茎芭,JVM 鎖保證了在單臺服務(wù)器上只有一個請求走到數(shù)據(jù)庫揖膜,通常來說已經(jīng)足夠保證數(shù)據(jù)庫的壓力大大降低,同時在性能上比分布式鎖更好梅桩。

2.熱點數(shù)據(jù)不過期

三壹粟、緩存雪崩

緩存雪崩是指,就是在某一個時刻宿百,緩存集大量失效煮寡。所有流量直接打到數(shù)據(jù)庫上,對數(shù)據(jù)庫造成巨大壓力犀呼;

解決方案:

1.redis高可用

緩存數(shù)據(jù)庫是分布式部署幸撕,將熱點數(shù)據(jù)均勻分布在不同搞得緩存數(shù)據(jù)庫中。

2.限流降級

這個解決方案的思想是外臂,在緩存失效后坐儿,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存宋光,其他線程等待貌矿。但是這種方式響應(yīng)會很慢

4.數(shù)據(jù)預(yù)熱

數(shù)據(jù)加熱的含義就是在正式部署之前,我先把可能的數(shù)據(jù)先預(yù)先訪問一遍罪佳,這樣部分可能大量訪問的數(shù)據(jù)就會加載到緩存中逛漫。在即將發(fā)生大并發(fā)訪問前手動觸發(fā)加載緩存不同的key,設(shè)置不同的過期時間赘艳,讓緩存失效的時間點盡量均勻酌毡。

4.緩存過期時間設(shè)置

緩存數(shù)據(jù)的過期時間設(shè)置隨機克握,防止同一時間大量數(shù)據(jù)過期現(xiàn)象發(fā)生〖咸ぃ或者直接設(shè)置熱點數(shù)據(jù)永遠不過期菩暗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旭蠕,隨后出現(xiàn)的幾起案子停团,更是在濱河造成了極大的恐慌,老刑警劉巖掏熬,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佑稠,死亡現(xiàn)場離奇詭異,居然都是意外死亡旗芬,警方通過查閱死者的電腦和手機讶坯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岗屏,“玉大人辆琅,你說我怎么就攤上這事≌馑ⅲ” “怎么了婉烟?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長暇屋。 經(jīng)常有香客問我似袁,道長,這世上最難降的妖魔是什么咐刨? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任昙衅,我火速辦了婚禮,結(jié)果婚禮上定鸟,老公的妹妹穿的比我還像新娘而涉。我一直安慰自己,他們只是感情好联予,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布啼县。 她就那樣靜靜地躺著,像睡著了一般沸久。 火紅的嫁衣襯著肌膚如雪季眷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天卷胯,我揣著相機與錄音子刮,去河邊找鬼。 笑死窑睁,一個胖子當著我的面吹牛挺峡,可吹牛的內(nèi)容都是我干的葵孤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼沙郭,長吁一口氣:“原來是場噩夢啊……” “哼佛呻!你這毒婦竟也來了裳朋?” 一聲冷哼從身側(cè)響起病线,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲤嫡,沒想到半個月后送挑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡暖眼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年惕耕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫肠。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡司澎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栋豫,到底是詐尸還是另有隱情挤安,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布丧鸯,位于F島的核電站蛤铜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丛肢。R本人自食惡果不足惜围肥,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜂怎。 院中可真熱鬧穆刻,春花似錦、人聲如沸杠步。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮愉。三九已至腐芍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間试躏,已是汗流浹背猪勇。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颠蕴,地道東北人泣刹。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓助析,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椅您。 傳聞我的和親對象是個殘疾皇子外冀,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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