91午夜免费视频-91午夜视频-91午夜影院-91系列在线-91线上观看-91香蕉视频在线

信息薈萃
    你的位置:首頁(yè) > 信息薈萃

    智慧停車系統(tǒng)高并發(fā)場(chǎng)景下先更新緩存還是先更新數(shù)據(jù)庫(kù)?

    來源:譽(yù)澄智能 2021/5/31 8:50:43??????點(diǎn)擊:
    在大型智慧停車系統(tǒng)中,為了減少數(shù)據(jù)庫(kù)壓力通常會(huì)引入緩存機(jī)制,一旦引入緩存又很容易造成緩存和數(shù)據(jù)庫(kù)數(shù)據(jù)不一致,導(dǎo)致用戶看到的是舊數(shù)據(jù)。

    為了減少數(shù)據(jù)不一致的情況,更新緩存和數(shù)據(jù)庫(kù)的機(jī)制顯得尤為重要,接下來帶領(lǐng)大家踩踩坑。

    Cache aside

    Cache aside也就是旁路緩存,是比較常用的緩存策略。

    (1)讀請(qǐng)求常見流程

    image.png

    應(yīng)用首先會(huì)判斷緩存是否有該數(shù)據(jù),緩存命中直接返回?cái)?shù)據(jù),緩存未命中即緩存穿透到數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)然后回寫到緩存中,最后返回?cái)?shù)據(jù)給客戶端。

    (2)寫請(qǐng)求常見流程

    image.png


    首先更新數(shù)據(jù)庫(kù),然后從緩存中刪除該數(shù)據(jù)。

    看了寫請(qǐng)求的圖之后,有些同學(xué)可能要問了:為什么要?jiǎng)h除緩存,直接更新不就行了?這里涉及到幾個(gè)坑,我們一步一步踩下去。

    Cache aside踩坑

    Cache aside策略如果用錯(cuò)就會(huì)遇到深坑,下面我們來逐個(gè)踩。

    踩坑一:先更新數(shù)據(jù)庫(kù),再更新緩存

    如果同時(shí)有兩個(gè)寫請(qǐng)求需要更新數(shù)據(jù),每個(gè)寫請(qǐng)求都先更新數(shù)據(jù)庫(kù)再更新緩存,在并發(fā)場(chǎng)景可能會(huì)出現(xiàn)數(shù)據(jù)不一致的情況。

    image.png

    如上圖的執(zhí)行過程:

    (1)寫請(qǐng)求1更新數(shù)據(jù)庫(kù),將 age 字段更新為18;

    (2)寫請(qǐng)求2更新數(shù)據(jù)庫(kù),將 age 字段更新為20;

    (3)寫請(qǐng)求2更新緩存,緩存 age 設(shè)置為20;

    (4)寫請(qǐng)求1更新緩存,緩存 age 設(shè)置為18;

    執(zhí)行完預(yù)期結(jié)果是數(shù)據(jù)庫(kù) age 為20,緩存 age 為20,結(jié)果緩存 age為18,這就造成了緩存數(shù)據(jù)不是最新的,出現(xiàn)了臟數(shù)據(jù)。

    踩坑二:先刪緩存,再更新數(shù)據(jù)庫(kù)

    如果寫請(qǐng)求的處理流程是先刪緩存再更新數(shù)據(jù)庫(kù),在一個(gè)讀請(qǐng)求和一個(gè)寫請(qǐng)求并發(fā)場(chǎng)景下可能會(huì)出現(xiàn)數(shù)據(jù)不一致情況。

    image.png

    如上圖的執(zhí)行過程:

    (1)寫請(qǐng)求刪除緩存數(shù)據(jù);

    (2)讀請(qǐng)求查詢緩存未擊中(Hit Miss),緊接著查詢數(shù)據(jù)庫(kù),將返回的數(shù)據(jù)回寫到緩存中;

    (3)寫請(qǐng)求更新數(shù)據(jù)庫(kù)。

    整個(gè)流程下來發(fā)現(xiàn)數(shù)據(jù)庫(kù)中age為20,緩存中age為18,緩存和數(shù)據(jù)庫(kù)數(shù)據(jù)不一致,緩存出現(xiàn)了臟數(shù)據(jù)。

    踩坑三:先更新數(shù)據(jù)庫(kù),再刪除緩存

    在實(shí)際的系統(tǒng)中針對(duì)寫請(qǐng)求還是推薦先更新數(shù)據(jù)庫(kù)再刪除緩存,但是在理論上還是存在問題,以下面這個(gè)例子說明。

    image.png

    如上圖的執(zhí)行過程:

    (1)讀請(qǐng)求先查詢緩存,緩存未擊中,查詢數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù);

    (2)寫請(qǐng)求更新數(shù)據(jù)庫(kù),刪除緩存;

    (3)讀請(qǐng)求回寫緩存;

    整個(gè)流程操作下來發(fā)現(xiàn)數(shù)據(jù)庫(kù)age為20緩存age為18,即數(shù)據(jù)庫(kù)與緩存不一致,導(dǎo)致應(yīng)用程序從緩存中讀到的數(shù)據(jù)都為舊數(shù)據(jù)。

    但我們仔細(xì)想一下,上述問題發(fā)生的概率其實(shí)非常低,因?yàn)橥ǔ?shù)據(jù)庫(kù)更新操作比內(nèi)存操作耗時(shí)多出幾個(gè)數(shù)量級(jí),上圖中最后一步回寫緩存(set age 18)速度非常快,通常會(huì)在更新數(shù)據(jù)庫(kù)之前完成。

    如果這種極端場(chǎng)景出現(xiàn)了怎么辦?我們得想一個(gè)兜底的辦法:緩存數(shù)據(jù)設(shè)置過期時(shí)間。通常在系統(tǒng)中是可以允許少量的數(shù)據(jù)短時(shí)間不一致的場(chǎng)景出現(xiàn)。

    Read through

    在 Cache Aside 更新模式中,應(yīng)用代碼需要維護(hù)兩個(gè)數(shù)據(jù)源頭:一個(gè)是緩存,一個(gè)是數(shù)據(jù)庫(kù)。而在 Read-Through 策略下,應(yīng)用程序無需管理緩存和數(shù)據(jù)庫(kù),只需要將數(shù)據(jù)庫(kù)的同步委托給緩存提供程序 Cache Provider 即可。所有數(shù)據(jù)交互都是通過抽象緩存層完成的。

    image.png

    如上圖,應(yīng)用程序只需要與Cache Provider交互,不用關(guān)心是從緩存取還是數(shù)據(jù)庫(kù)。

    在進(jìn)行大量讀取時(shí),Read-Through 可以減少數(shù)據(jù)源上的負(fù)載,也對(duì)緩存服務(wù)的故障具備一定的彈性。如果緩存服務(wù)掛了,則緩存提供程序仍然可以通過直接轉(zhuǎn)到數(shù)據(jù)源來進(jìn)行操作。

    Read-Through 適用于多次請(qǐng)求相同數(shù)據(jù)的場(chǎng)景,這與 Cache-Aside 策略非常相似,但是二者還是存在一些差別,這里再次強(qiáng)調(diào)一下:

    • 在 Cache-Aside 中,應(yīng)用程序負(fù)責(zé)從數(shù)據(jù)源中獲取數(shù)據(jù)并更新到緩存。
    • 在 Read-Through 中,此邏輯通常是由獨(dú)立的緩存提供程序(Cache Provider)支持。

    Write through

    Write-Through 策略下,當(dāng)發(fā)生數(shù)據(jù)更新(Write)時(shí),緩存提供程序 Cache Provider 負(fù)責(zé)更新底層數(shù)據(jù)源和緩存。

    緩存與數(shù)據(jù)源保持一致,并且寫入時(shí)始終通過抽象緩存層到達(dá)數(shù)據(jù)源。

    Cache Provider類似一個(gè)代理的作用。

    image.png

    rite-Through流程

    Write behind

    Write behind在一些地方也被成為Write back 簡(jiǎn)單理解就是:應(yīng)用程序更新數(shù)據(jù)時(shí)只更新緩存, Cache Provider每隔一段時(shí)間將數(shù)據(jù)刷新到數(shù)據(jù)庫(kù)中。說白了就是延遲寫入

    image.png


    Write behind流程

    如上圖,應(yīng)用程序更新兩個(gè)數(shù)據(jù),Cache Provider 會(huì)立即寫入緩存中,但是隔一段時(shí)間才會(huì)批量寫入數(shù)據(jù)庫(kù)中。

    這種方式有優(yōu)點(diǎn)也有缺點(diǎn):

    · 

    優(yōu)點(diǎn)是數(shù)據(jù)寫入速度非常快,適用于頻繁寫的場(chǎng)景。

    · 

    · 

    缺點(diǎn)是緩存和數(shù)據(jù)庫(kù)不是強(qiáng)一致性,對(duì)一致性要求高的系統(tǒng)慎用。

    · 

    總結(jié)一下

    學(xué)了這么多,相信大家對(duì)緩存更新的策略都已經(jīng)有了清晰的認(rèn)識(shí)。最后稍稍總結(jié)一下。

    緩存更新的策略主要分為三種:

    · Cache aside

    · Read/Write through

    · Write behind

    Cache aside 通常會(huì)先更新數(shù)據(jù)庫(kù),然后再刪除緩存,為了兜底通常還會(huì)將數(shù)據(jù)設(shè)置緩存時(shí)間。

    Read/Write through 一般是由一個(gè) Cache Provider 對(duì)外提供讀寫操作,應(yīng)用程序不用感知操作的是緩存還是數(shù)據(jù)庫(kù)。

    Write behind簡(jiǎn)單理解就是延遲寫入,Cache Provider 每隔一段時(shí)間會(huì)批量輸入數(shù)據(jù)庫(kù),優(yōu)點(diǎn)是應(yīng)用程序?qū)懭胨俣确浅?臁?/span>


    主站蜘蛛池模板: 久久久久婷 | 欧美成人日韩 | 综合色婷婷 | 国产成人av在线影院 | 国内亚洲精品 | 91视频在线观看大全 | 欧美激情片在线观看 | 国产精品99久久久久久宅男 | 日本黄色黄网站 | 国产精品第三页 | 国产日韩高清在线 | 91丨九色丨丝袜 | 99久久精品免费看国产四区 | 成人超碰97| 在线看免费 | 韩日精品在线 | 91香蕉视频污在线 | 免费高清在线观看成人 | 中文字幕日本特黄aa毛片 | 日本精油按摩3 | 婷婷综合av | 国产精品免费在线播放 | 丁香花五月 | 青青草国产精品 | 久久99亚洲网美利坚合众国 | 精品久久国产一区 | 狠狠久久综合 | 少妇性aaaaaaaaa视频 | 日韩精品最新在线观看 | 日本精品久久久久中文字幕5 | 日韩视频中文 | 欧美日产一区 | 视频三区| 久久蜜臀一区二区三区av | 亚洲综合射 | 日韩欧美一区二区不卡 | 欧美特一级 | 日韩在线中文字幕 | 在线观看中文字幕亚洲 | 国产精品永久久久久久久久久 | 亚洲黄色小说网 | 97色国产 | 伊人午夜 | 亚洲h在线播放在线观看h | 91精品国产综合久久福利不卡 | 国产色视频网站2 | 久久久美女 | 在线国产福利 | 又爽又黄又刺激的视频 | 麻豆传媒视频在线 | av在线一二三区 | 久久久久免费精品视频 | 日日操操操 | 精品美女久久久久 | 国产亚洲精品电影 | 九色精品免费永久在线 | 日韩欧美一区二区三区黑寡妇 | 国产精品久久久久久久久久尿 | 在线观看av不卡 | 国产一区视频免费在线观看 | 欧美一区二视频在线免费观看 | 成人免费观看在线视频 | 国产精品久久久久久吹潮天美传媒 | 四虎成人免费影院 | 激情网五月婷婷 | 日韩高清成人 | 国产精品美女视频网站 | 毛片一区二区 | 亚洲精品国产欧美在线观看 | 精品福利视频在线观看 | 久久免费公开视频 | 国产精品久久免费看 | 狠狠操操操| 亚洲va欧美va人人爽春色影视 | 成人黄视频 | 色婷婷综合久久久中文字幕 | 成人av片在线观看 | 天天色中文 | 狠狠色丁香久久婷婷综合_中 | 久射网| 日本少妇高清做爰视频 | 91丨九色丨国产丨porny精品 | 久久久久亚洲国产精品 | 国产一及片 | 操操综合网 | 日韩毛片在线一区二区毛片 | 久久神马影院 | 国产精品欧美久久久久三级 | 亚洲国产精品va在线看黑人 | 国产亚洲一区二区在线观看 | 在线观看黄色的网站 | 中文字幕av日韩 | 久草在线免费在线观看 | 中文字幕在线第一页 | 成人黄色毛片视频 | 免费网站v| 国产精品一区在线播放 | 69精品视频 | 中文资源在线官网 |