Redis緩存穿透實(shí)際例子

表關(guān)系描述

類似于好友之間的關(guān)聯(lián)關(guān)系,有表N调炬,M以及N與M的關(guān)聯(lián)關(guān)系表坏怪,N表與M表假設(shè)均有100W的數(shù)據(jù),M與N兩者關(guān)系是一個(gè)稀疏矩陣(只有少部分之間有關(guān)系奠伪,大約10%)。

業(yè)務(wù)場景

通過表N中的一條記錄首懈,來查詢關(guān)聯(lián)的M有哪些人绊率,并且這是一個(gè)高頻次操作。

存在的問題

mysql單庫承受如此多的查詢請(qǐng)求究履,容易拖垮整個(gè)庫滤否。

解決方案

以下解決方案的目的是為了過濾掉空查詢。

Redis設(shè)置空值

方案描述

在查詢到N與M關(guān)聯(lián)關(guān)系表中的空值時(shí)最仑,就往Redis存儲(chǔ)一個(gè)空值藐俺,設(shè)置一個(gè)的過期時(shí)間(固定時(shí)間+隨機(jī)時(shí)間),大約是3天泥彤。

問題

這個(gè)關(guān)系的N*M紊搪,需要把所有的空值都放進(jìn)去,按照假設(shè)的數(shù)據(jù)量全景,極限情況下Redis中需要存儲(chǔ)100W * 100W的數(shù)據(jù)耀石,這個(gè)數(shù)據(jù)量是很大的。按照實(shí)際項(xiàng)目預(yù)估值,Redis大小是128G滞伟,每天增長在7GB左右揭鳞,Redis滿了以后,會(huì)出現(xiàn)部分打在DB上的情況梆奈。

方案優(yōu)化

  1. 優(yōu)化Key的長度野崇,降低內(nèi)存占用;
  2. 慢慢縮短過期時(shí)間亩钟,直到DB能夠承受的穿透查詢量乓梨;
  3. 調(diào)整Redis的緩存淘汰策略,從noevication(默認(rèn)清酥,除了del請(qǐng)求扶镀,不會(huì)繼續(xù)服務(wù)寫請(qǐng)求)改為volatile-lru(淘汰設(shè)計(jì)了過期時(shí)間的key,最少使用的key被淘汰)焰轻;
  4. 加內(nèi)存臭觉,硬件相對(duì)人力成本很便宜。

將Redis當(dāng)做數(shù)據(jù)庫

方案描述

因?yàn)镹與N關(guān)系表是一個(gè)稀疏矩陣辱志,按照10%的比例蝠筑,數(shù)據(jù)大概在1000w左右,可以將Redis作為數(shù)據(jù)庫揩懒,直接將1000W數(shù)據(jù)放入Redis中什乙。

問題

  1. 緩存與數(shù)據(jù)庫雙寫存在數(shù)據(jù)一致性問題;
  2. 業(yè)務(wù)變得更復(fù)雜,當(dāng)業(yè)務(wù)數(shù)據(jù)量增長后已球,需要付出很大的遷移代價(jià)臣镣。

方案優(yōu)化

針對(duì)問題1,可以通過訂閱mysql的binlog和悦,主動(dòng)變更Redis的緩存。問題2是業(yè)務(wù)取舍渠缕,沒有什么很好的辦法鸽素。

使用布隆過濾器

布隆過濾器判斷數(shù)據(jù)不存在,則一定不存在亦鳞。判斷數(shù)據(jù)存在馍忽,存在誤判概率。

方案描述

對(duì)于新增的數(shù)據(jù)燕差,寫入Redis實(shí)現(xiàn)的布隆過濾器遭笋,刪除的數(shù)據(jù)不進(jìn)行處理。定時(shí)的重建布隆過濾器徒探,例如每小時(shí)重建一次瓦呼,那么在單位時(shí)間內(nèi)刪除量不是很大的情況下,打到數(shù)據(jù)庫層的空請(qǐng)求請(qǐng)求不會(huì)很多测暗。并且央串,全量的數(shù)據(jù)使用布隆過濾器磨澡,對(duì)于3億的數(shù)據(jù),內(nèi)存只需要大概十幾MB质和。額外需要再保證存在的數(shù)據(jù)也緩存一份到Redis中稳摄,如果有必要可以通過Guava做JVM級(jí)別的緩存。
判斷邏輯如下

  1. 判斷布隆過濾器中是否存在饲宿,若不存在厦酬,則返回;
  2. 布隆過濾器中存在瘫想,則判斷Redis是否存在仗阅,若存在,則返回殿托;
  3. 若Redis中不存在霹菊,則去數(shù)據(jù)庫中查詢。

問題

  1. 布隆過濾器重建需要掃描全表支竹,對(duì)與數(shù)據(jù)量多的表來說旋廷,mysql的壓力還是比較大;

方案優(yōu)化

需要小心平衡布隆過濾器重建間隔與mysql的訪問壓力礼搁。若布隆過濾器重建時(shí)間間隔太長饶碘,則被刪除的空數(shù)據(jù)還是會(huì)打入DB,若布隆過濾器重建時(shí)間間隔太短馒吴,全表查詢掃描會(huì)對(duì)mysql造成壓力扎运。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饮戳,隨后出現(xiàn)的幾起案子豪治,更是在濱河造成了極大的恐慌,老刑警劉巖扯罐,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件负拟,死亡現(xiàn)場離奇詭異,居然都是意外死亡歹河,警方通過查閱死者的電腦和手機(jī)掩浙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秸歧,“玉大人厨姚,你說我怎么就攤上這事〖猓” “怎么了谬墙?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我芭梯,道長险耀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任玖喘,我火速辦了婚禮甩牺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累奈。我一直安慰自己贬派,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布澎媒。 她就那樣靜靜地躺著搞乏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戒努。 梳的紋絲不亂的頭發(fā)上请敦,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音储玫,去河邊找鬼侍筛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撒穷,可吹牛的內(nèi)容都是我干的匣椰。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼端礼,長吁一口氣:“原來是場噩夢啊……” “哼禽笑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛤奥,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤佳镜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后凡桥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟀伸,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年唬血,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了望蜡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唤崭。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拷恨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谢肾,到底是詐尸還是另有隱情腕侄,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站冕杠,受9級(jí)特大地震影響微姊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜分预,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一兢交、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笼痹,春花似錦配喳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至救赐,卻和暖如春涧团,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背经磅。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工泌绣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馋贤。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓赞别,卻偏偏與公主長得像,于是被迫代替她去往敵國和親配乓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仿滔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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