国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

數(shù)據(jù)更新策略:到底是先更新數(shù)據(jù)庫還是先更新緩存?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
從本質(zhì)上講,無論是先寫數(shù)據(jù)庫還是先寫緩存,都是為了保證數(shù)據(jù)庫和緩存的數(shù)據(jù)一致,也就是我們常說的數(shù)據(jù)一致性。

很多小伙伴最近都在問我,在系統(tǒng)中引入緩存后,當(dāng)向數(shù)據(jù)庫中寫入數(shù)據(jù)時,是先寫數(shù)據(jù)庫還是先寫緩存呢?先寫數(shù)據(jù)庫和先寫緩存有什么區(qū)別嗎?今天,我們就一起來聊聊這個話題。

又一個可直接應(yīng)用于生產(chǎn)環(huán)境的熔斷組件項目完結(jié)并上線,點擊鏈接:https://t.zsxq.com/HIE6n 快速學(xué)習(xí),并可直接應(yīng)用于你的生產(chǎn)環(huán)境項目。

從本質(zhì)上講,無論是先寫數(shù)據(jù)庫還是先寫緩存,都是為了保證數(shù)據(jù)庫和緩存的數(shù)據(jù)一致,也就是我們常說的數(shù)據(jù)一致性。

隨著互聯(lián)網(wǎng)的高速發(fā)展,當(dāng)今時代已然從IT時代進入到DT時代?;ヂ?lián)網(wǎng)系統(tǒng)架構(gòu)也已經(jīng)由最初的單體架構(gòu)轉(zhuǎn)變?yōu)榉植际?、微服?wù)架構(gòu)模式。從數(shù)據(jù)體量上來看,各系統(tǒng)存儲的數(shù)據(jù)量越來越大,數(shù)據(jù)的查詢性能越來越低。此時,就需要我們不斷的進行優(yōu)化,一種常用的優(yōu)化手段就是引入緩存。而引入緩存后,我們在向數(shù)據(jù)庫插入數(shù)據(jù)時,到底是先更新數(shù)據(jù)庫還是先更新緩存呢?

緩存的一般使用

緩存,從本質(zhì)上講,是為了更好的協(xié)調(diào)兩個速度差異比較大的組件而引入的一種中間緩存層。例如,如果需要將數(shù)據(jù)讀入CPU進行計算處理,由于CPU的運算速度是非??斓模疟P的IO處理相比于CPU來說,慢了很多數(shù)量級,每次從磁盤讀取數(shù)據(jù),勢必會造成CPU長時間并且頻繁等待磁盤IO。此時,我們就可以通過內(nèi)存來緩和CPU和磁盤之間的速度差異。

圖片圖片

從緩存的使用上來說,一般是按照如下的流程來使用緩存。

圖片圖片

我們也可以表示成如下的序列圖。

圖片圖片

在上面的使用示例中,我們只是簡單的將數(shù)據(jù)放入了緩存,最多為緩存設(shè)置一個過期時間,到期后,緩存自然就會被清除,后續(xù)的請求由于在緩存中獲取不到數(shù)據(jù),又會從數(shù)據(jù)庫中獲取數(shù)據(jù),將數(shù)據(jù)寫入緩存。

但是在后續(xù)更新數(shù)據(jù)的操作中,是更新完數(shù)據(jù)庫,接下來更新緩存還是刪除緩存?又或者是先刪除緩存,再更新數(shù)據(jù)庫?

緩存更新策略

從理論上來說,給緩存設(shè)置過期時間,其實是一種最終一致性的表現(xiàn)。這種方案下,可以對存入緩存的數(shù)據(jù)設(shè)置過期時間,所有的寫操作以數(shù)據(jù)庫為準(zhǔn),對緩存操作只是盡最大努力即可。也就是說如果數(shù)據(jù)庫寫成功,緩存更新失敗,那么只要到達過期時間,則后面的讀請求自然會從數(shù)據(jù)庫中讀取新值然后回填緩存。這也是一般情況下,使用的最多的一種方式。

先更新數(shù)據(jù)庫再更新緩存

其實,這種方案很多有經(jīng)驗的小伙伴是很反對的,為啥,我們來分析下。

首先,這種方案會有線程安全的問題。

例如,同時有線程A和線程B對數(shù)據(jù)進行更新操作,可能會出現(xiàn)下面的執(zhí)行順序。

(1) 線程A更新了數(shù)據(jù)庫

(2) 線程B更新了數(shù)據(jù)庫

(3) 線程B更新了緩存

(4) 線程A更新了緩存

此時就會出現(xiàn)數(shù)據(jù)庫中的數(shù)據(jù)與緩存的數(shù)據(jù)不一致的情況,這是因為線程A先更新了數(shù)據(jù)庫,可能因為網(wǎng)絡(luò)等異常情況,線程B更新完數(shù)據(jù)庫進而更新了緩存,當(dāng)線程B更新完緩存后,線程A才更新緩存,這就導(dǎo)致了數(shù)據(jù)庫數(shù)據(jù)與緩存數(shù)據(jù)的不一致。

其次,這種方案也有其不適用的業(yè)務(wù)場景。

首先一個業(yè)務(wù)場景就是數(shù)據(jù)庫寫多讀少的場景,這種場景下采用先更新數(shù)據(jù)庫再更新緩存的策略,就會導(dǎo)致緩存并未被讀取就會被頻繁的更新,極大的浪費了服務(wù)器的性能。

再一個業(yè)務(wù)場景就是數(shù)據(jù)庫中的數(shù)據(jù)不是直接寫入緩存的,而是需要大量的復(fù)雜運算,將運算結(jié)果寫入緩存。如果這種場景下使用先更新數(shù)據(jù)庫再更新緩存的策略,也會造成服務(wù)器資源的浪費。

先刪除緩存再更新數(shù)據(jù)庫

先刪除緩存再更新數(shù)據(jù)庫的方案也存在著線程安全的問題,例如,線程A更新緩存,同時,線程B讀取緩存的數(shù)據(jù)。可能會出現(xiàn)下面的執(zhí)行順序。

(1) 線程A刪除緩存

(2) 線程B查詢緩存,發(fā)現(xiàn)緩存中沒有想要的數(shù)據(jù)

(3) 線程B查詢數(shù)據(jù)庫中的舊數(shù)據(jù)

(4) 線程B將查詢到的舊數(shù)據(jù)寫入緩存

(5) 線程A將新數(shù)據(jù)寫入數(shù)據(jù)庫

此時,就出現(xiàn)了數(shù)據(jù)庫中的數(shù)據(jù)和緩存中的數(shù)據(jù)不一致的情況。如果刪除緩存失敗,也會出現(xiàn)數(shù)據(jù)庫數(shù)據(jù)和緩存數(shù)據(jù)不一致的現(xiàn)象。

先更新數(shù)據(jù)庫再刪除緩存

首先,這種方式也有極小的概率發(fā)生數(shù)據(jù)庫數(shù)據(jù)和緩存數(shù)據(jù)不一致的情況,例如,線程A做查詢操作,線程B執(zhí)行更新操作,其執(zhí)行的順序如下所示。

(1)緩存剛好失效

(2)請求A查詢數(shù)據(jù)庫,獲取到數(shù)據(jù)庫中的舊值

(3)請求B將新值寫入數(shù)據(jù)庫

(4)請求B刪除緩存

(5)請求A將查到的舊值寫入緩存

如果上述順序一旦發(fā)生,就會造成數(shù)據(jù)庫中的數(shù)據(jù)和緩存中的數(shù)據(jù)不一致的情況發(fā)生。

但是,先更新數(shù)據(jù)庫再刪除緩存的策略發(fā)生數(shù)據(jù)庫和緩存數(shù)據(jù)不一致的概率很低,原因就是:(3)的寫數(shù)據(jù)庫操作比步驟(2)的讀數(shù)據(jù)庫操作耗時更短,才有可能使得步驟(4)先于步驟(5)執(zhí)行。但是,往往數(shù)據(jù)庫的讀操作的速度遠快于寫操作,因此步驟(3)耗時比步驟(2)更短,這一場景很難出現(xiàn)。

如果刪除緩存失敗,也會出現(xiàn)數(shù)據(jù)庫數(shù)據(jù)和緩存數(shù)據(jù)不一致的現(xiàn)象。

這樣說來,貌似三種方案都不安全呀,那我們該如何做呢?最重要的就是需要引入重試機制。

推薦使用

在實際的生產(chǎn)環(huán)境中,推薦 使用先更新數(shù)據(jù)庫再刪除緩存 的操作。那么,我們該如何解決這種策略下的問題呢?

有兩種方案,一種是在程序邏輯中處理失敗重試的操作;另外,借助于阿里巴巴開源的Canal。

手動失敗重試


圖片圖片

流程如下所示:

(1)更新數(shù)據(jù)庫數(shù)據(jù);

(2)刪除緩存數(shù)據(jù)失敗

(3)將需要刪除的key發(fā)送至消息隊列

(4)自己消費消息,獲得需要刪除的key

(5)繼續(xù)重試刪除操作,直到成功

這種方案有一個缺點,對業(yè)務(wù)線代碼造成大量的侵入。

同步數(shù)據(jù)庫數(shù)據(jù)

先來一張圖,這種圖從整體架構(gòu)上解決了數(shù)據(jù)庫數(shù)據(jù)和緩存數(shù)據(jù)不一致的情況。


圖片圖片

流程如下圖所示:

(1)更新數(shù)據(jù)庫數(shù)據(jù)

(2)數(shù)據(jù)庫將數(shù)據(jù)表數(shù)據(jù)的變更信息寫入binlog日志當(dāng)中

(3)訂閱程序獲取所需要的數(shù)據(jù)以及key

(4)程序邏輯中處理具體的業(yè)務(wù)邏輯,接收訂閱binlog、發(fā)起刪除緩存的請求。

(5)嘗試刪除緩存操作,發(fā)現(xiàn)刪除失敗

(6)將這些信息發(fā)送至消息隊列

(7)重新從消息隊列中獲得該數(shù)據(jù),重試操作

責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2021-03-19 07:40:22

緩存數(shù)據(jù)庫日志

2021-01-13 05:23:27

緩存數(shù)據(jù)庫高并發(fā)

2024-12-16 08:01:57

2018-07-13 15:56:39

緩存數(shù)據(jù)庫數(shù)據(jù)

2018-10-24 14:30:30

緩存服務(wù)更新

2023-12-27 13:44:00

數(shù)據(jù)庫系統(tǒng)分布式

2017-04-12 11:15:52

ReactsetState策略

2011-11-04 14:07:20

微軟Hotmail策略

2020-02-10 09:35:18

數(shù)據(jù)中心服務(wù)器技術(shù)

2018-10-19 11:07:02

主流緩存更新

2024-12-03 10:59:36

2021-01-29 10:51:48

高并發(fā)數(shù)據(jù)庫緩存

2019-12-24 09:12:10

運維架構(gòu)技術(shù)

2023-04-13 08:15:47

Redis緩存一致性

2011-05-26 15:53:59

數(shù)據(jù)庫更新維護

2021-10-15 21:16:00

手機內(nèi)存漏洞

2011-07-01 14:03:44

數(shù)據(jù)庫緩存

2009-03-19 10:08:09

C#數(shù)據(jù)庫查詢

2022-04-01 16:55:22

數(shù)據(jù)庫緩存日志

2024-03-28 13:13:00

Htmx前端開發(fā)框架
點贊
收藏

51CTO技術(shù)棧公眾號

成人福利一区| 国产精品亚洲аv天堂网| 亚洲成人影院在线观看| 黄色成人在线网站| 国产精品99久久免费黑人人妻| 在线观看久久av| 奇米777国产一区国产二区| 7777精品伊久久久大香线蕉语言| 毛片av一区二区| 天堂男人av| 一本大道亚洲视频| 欧美日本国产| 妺妺窝人体色www在线观看| 久久午夜影院| 中文字幕国产精品| 亚洲免费av在线| 在线播放高清视频www| 国产日韩二区| 黄色成人在线免费| av观看在线| 欧美有码在线观看| 久久成人久久爱| 天堂а在线中文在线无限看推荐| 中文字幕久精品免费视频| 亚洲午夜在线| 成年人网站免费视频| 熟女熟妇伦久久影院毛片一区二区| 亚洲美女一区| 黄色大秀av大片| 亚洲va国产va欧美va观看| 国内一区二区在线| 交视频在线观看国产| 999精品一区| 最近最新中文字幕在线| 超碰国产精品久久国产精品99| 精品少妇一区二区三区日产乱码| 在线精品视频在线观看高清| 悠悠色在线精品| 成人av影院在线| 国产精品毛片无码| 中文国产成人精品久久一| 中文av一区| 国产精品久久久久久久浪潮网站| 精品国产乱码一区二区三区| 亚洲免费色视频| 韩国三级大全久久网站| 一区精品在线| 538在线一区二区精品国产| 久久在线播放| 欧美变态视频| 成人精品视频久久久久| 一区二区三区四区激情| 精品午夜电影| 色乱码一区二区三区在线| 欧美高清自拍一区| 成人自拍视频在线观看| 超碰aⅴ人人做人人爽欧美| 日韩资源av在线| 日韩你懂的在线观看| 中日韩男男gay无套| 国产小视频在线| 国产亚洲精品久久飘花| 欧美午夜精品一区二区三区| 韩国一区二区三区在线观看| 色资源在线观看| 91免费精品国偷自产在线| 亚洲国产婷婷综合在线精品| 成人黄色av| 在线观看av中文| 国产精品成人一区二区三区| 欧美日韩亚洲综合在线| 在线播放不卡| 怡红院在线播放| 一区二区精品国产| 一区二区欧美激情| 久久精品视频网| 免费精品国产的网站免费观看| 最新av中文字幕| 69堂成人精品视频免费| 欧美三级电影一区| 肉色丝袜一区二区| 日本免费一区二区三区四区| 波多野结衣家庭教师在线| 欧美国产日韩精品| 亚洲成人福利片| 亚洲一区日韩在线| 777午夜精品电影免费看| 美女一区二区三区视频| 国产精品一区二区3区| 欧美视频在线一区二区三区| 日本美女一区二区三区| 丁香久久综合| 日本女优天堂99伊人| 精品一区二区国产| 国产一区二区三区毛片| 国产精品久久久久桃色tv| 久久久久免费av| 成人性生交大片免费看网站| 国产精品一区二区免费在线观看| 国产成人精品视频在线观看| 日韩一区二区久久| 美女扒开腿让男人桶爽久久软| 国产福利一区视频| 91九色在线观看| 亚洲无线码在线一区观看| 成人免费一区二区三区在线观看| 精品1区2区3区4区| 羞羞影院欧美| 97在线观看免费观看| 亚洲精品人成| 日本a级片电影一区二区| 欧美一区二区在线播放| 2020日本不卡一区二区视频| 欧美电影一二区| 欧美日韩免费看片| 中文字幕av在线| 无码av天堂一区二区三区| 国产精品九九九| 国产视频亚洲视频| 亚洲国产日韩a在线播放性色| 视频一区中文字幕| 久久精品亚洲成在人线av网址| 黄色成人在线| 欧洲av在线精品| 疯狂做受xxxx欧美肥白少妇| 国产午夜精品全部视频播放| 日韩精品在线观看一区| 亚洲精品国产美女| 日韩中文视频免费在线观看| 日韩毛片在线观看| 久久99精品久久久久久琪琪 | 97秋霞电影网| 九九九久久久久久| 欧美日韩一区二区三区高清| 国产精品自拍毛片| 一区二区三区中文| av日韩精品| 蜜桃视频www网站在线观看| 污污的网站18| 视频一区欧美| 国产传媒欧美日韩成人| 中文字幕欧美日韩精品| 亚洲欧洲另类国产综合| 日本小视频在线免费观看| 97在线超碰| 亚洲精品极品| 不卡电影免费在线播放一区| 亚洲男女一区二区三区| 最新国产成人在线观看| 成人在线直播| av在线中文| 国产精品1luya在线播放| 亚洲美洲欧洲综合国产一区| 国产乱码精品一区二区三区五月婷 | 你懂的在线免费观看| 激情福利在线| 成人春色在线观看免费网站| 在线成人视屏| 亚洲欧洲色图| 国产农村妇女精品一二区| 亚洲精品资源| 成人午夜在线免费| 国产成a人亚洲| 久久九九影视网| 亚洲一区二区高清| 欧美一级生活片| 国产精品99久久99久久久二8| 免费国产一区二区| 午夜免费看视频| av在线精品| 成人激情小说乱人伦| 日韩激情av在线播放| 久久97精品久久久久久久不卡| 欧美日韩电影在线播放| 亚洲一区二区三区四区五区黄| 成人精品在线视频观看| 日韩—二三区免费观看av| 夜间精品视频| 国内精品久久久久久久影视简单 | 青青青草原在线| 色偷偷免费视频| 日韩爱爱小视频| 我的公把我弄高潮了视频| 综合一区中文字幕| 在线观看国产一区| 性欧美18一19内谢| 99re8这里只有精品| 国产成人精品免费看在线播放 | 欧美jizz| 色棕色天天综合网| 四虎884aa成人精品最新| 成人线上播放| 荡女精品导航| 国产精品白浆| 日韩啪啪网站| 成人在线免费观看视频| 香蕉人人精品| 日产精品一区二区| 欧美激情第10页| 日韩视频在线一区二区三区|