緩存設(shè)計(jì)模式

redis使用啥的就不說了,網(wǎng)上資料很多吩翻,本文主要講使用緩存的一些設(shè)計(jì)模式兜看;
以下幾個(gè)緩存模式,本身是微軟用在操作系統(tǒng)中的仿野,此處借用來用于微服務(wù)中也是合適的铣减;文末有微軟的鏈接;

緩存的重要性:磁盤一次操作10 ms左右脚作,內(nèi)存一次操作65 ns左右葫哗,1 ms = 10^6 ns,差了好幾個(gè)量級(jí)

1.read-through讀穿透模式
應(yīng)用讀取數(shù)據(jù)球涛,只讀取緩存數(shù)據(jù)劣针;緩存自己保證與數(shù)據(jù)庫(kù)的同步性

2.write-through寫穿透
應(yīng)用數(shù)據(jù)只寫入緩存体箕,由緩存自身保證同步到數(shù)據(jù)庫(kù)姜性;

3.write-behind
應(yīng)用數(shù)據(jù)只寫入緩存,緩存自身保證但是不立即同步到數(shù)據(jù)庫(kù)大州,會(huì)有一定延時(shí)从祝,批量寫入
參考write-behind

4.cache-aside
這種模式襟己,是用在沒有緩存框架保證上述三種模式時(shí),用來模仿上述三種模式牍陌;
也是平常業(yè)務(wù)系統(tǒng)最常用的模式擎浴;
增:寫數(shù)據(jù)庫(kù);
刪:刪數(shù)據(jù)庫(kù)毒涧,然后失效緩存贮预;
改:更新數(shù)據(jù)庫(kù),然后失效緩存
查:命中緩存則返回契讲;不命中數(shù)據(jù)庫(kù)仿吞,則查詢數(shù)據(jù)庫(kù),同時(shí)更新緩存捡偏;

注:緩存設(shè)計(jì)要注意緩存雪崩唤冈、緩存穿透、緩存擊穿問題

5.實(shí)例一
背景:業(yè)務(wù)中有一批和門店相關(guān)數(shù)據(jù)银伟,每天只更新1-2次你虹,但是查詢QPS極高
模式:低頻更新凉当、高頻查詢的數(shù)據(jù),cache-aside售葡;

低頻更新、高頻查詢

6.實(shí)例二
背景:業(yè)務(wù)中有一批動(dòng)態(tài)數(shù)據(jù)忠藤,一批用戶實(shí)時(shí)產(chǎn)生挟伙,一批用戶在app上實(shí)時(shí)查詢,增刪改查QPS都非常高模孩;
模式:高頻更新尖阔、高頻查詢的數(shù)據(jù),采用write-behind + read-through模式
使用兩個(gè)緩存:寫緩存榨咐、讀緩存


高頻更新介却、高頻查詢

7.實(shí)例一+實(shí)例二
背景:一般業(yè)務(wù)系統(tǒng),實(shí)例一和實(shí)例二都是同時(shí)存在的块茁;
方案:緩存設(shè)計(jì)兩個(gè)齿坷,一個(gè)讀緩存+一個(gè)寫緩存,同時(shí)滿足實(shí)例一和實(shí)例二中數(shù)據(jù)数焊;數(shù)據(jù)庫(kù)可以分別寫到不同的業(yè)務(wù)系統(tǒng)中去永淌;

當(dāng)然,上面的設(shè)計(jì)模式是存在很多并發(fā)問題的:
比如高頻更新模式佩耳,某條數(shù)據(jù)遂蛀,緩存已失效,這會(huì)如果讀數(shù)據(jù)并且更新緩存干厚,不是一個(gè)原子性操作李滴,中間有個(gè)GC停頓啥的就更久了;這兩個(gè)操作中間蛮瞄,如果數(shù)據(jù)庫(kù)中數(shù)據(jù)被更新所坯,那么最終更新到緩存的是過期數(shù)據(jù);
當(dāng)然裕坊,概率不大包竹,當(dāng)時(shí)必須要考慮到這點(diǎn);
那是要去解決這個(gè)問題嗎籍凝?雖然你可能通過更復(fù)雜的事務(wù)模式周瞎,鬼斧神工地去保證事務(wù)性,但是復(fù)雜度太高饵蒂,做一次容易声诸,業(yè)務(wù)一直保持正確難,不太建議那么干退盯;我建議你避開它彼乌,上述模式使用必須進(jìn)行業(yè)務(wù)判斷是否允許少量此種情況出現(xiàn)泻肯;
有些業(yè)務(wù)場(chǎng)景強(qiáng)依賴數(shù)據(jù)正確性比如金額計(jì)算啥的,就不能用緩存來做慰照;
而應(yīng)該使用強(qiáng)事務(wù)性的數(shù)據(jù)庫(kù)灶挟;
金融行業(yè)推薦螞蟻的OceanBase

當(dāng)然,還有個(gè)更好用的工具去更新緩存:databus了解下毒租,追數(shù)據(jù)庫(kù)日志稚铣,并解析操作;

參考資料:
https://docs.microsoft.com/en-us/azure/architecture/patterns/cache-aside

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墅垮,一起剝皮案震驚了整個(gè)濱河市惕医,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌算色,老刑警劉巖抬伺,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異灾梦,居然都是意外死亡峡钓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門斥废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椒楣,“玉大人,你說我怎么就攤上這事牡肉∨趸遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵统锤,是天一觀的道長(zhǎng)毛俏。 經(jīng)常有香客問我,道長(zhǎng)饲窿,這世上最難降的妖魔是什么煌寇? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逾雄,結(jié)果婚禮上阀溶,老公的妹妹穿的比我還像新娘。我一直安慰自己鸦泳,他們只是感情好银锻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著做鹰,像睡著了一般击纬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钾麸,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天更振,我揣著相機(jī)與錄音炕桨,去河邊找鬼。 笑死肯腕,一個(gè)胖子當(dāng)著我的面吹牛献宫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播实撒,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼遵蚜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了奈惑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤睡汹,失蹤者是張志新(化名)和其女友劉穎肴甸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囚巴,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡原在,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤叉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶柿。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秽浇,靈堂內(nèi)的尸體忽然破棺而出浮庐,到底是詐尸還是另有隱情,我是刑警寧澤柬焕,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布审残,位于F島的核電站,受9級(jí)特大地震影響斑举,放射性物質(zhì)發(fā)生泄漏搅轿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一富玷、第九天 我趴在偏房一處隱蔽的房頂上張望璧坟。 院中可真熱鬧,春花似錦赎懦、人聲如沸雀鹃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)褐澎。三九已至,卻和暖如春伐蒋,著一層夾襖步出監(jiān)牢的瞬間工三,已是汗流浹背迁酸。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俭正,地道東北人奸鬓。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掸读,于是被迫代替她去往敵國(guó)和親串远。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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