欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

雙寫(xiě)方式是什么

本篇內(nèi)容主要講解“雙寫(xiě)方式是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“雙寫(xiě)方式是什么”吧!

碭山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!

什么是雙寫(xiě)?

我們開(kāi)門(mén)見(jiàn)山,這個(gè)很好理解,雙寫(xiě)就是說(shuō),一份數(shù)據(jù)在數(shù)據(jù)庫(kù)存一份,在緩存中也存一份,給緩存一個(gè)過(guò)期時(shí)間,當(dāng)讀不到緩存時(shí)從數(shù)據(jù)庫(kù)讀出來(lái)然后寫(xiě)入緩存。

為什么需要雙寫(xiě)呢?

雙寫(xiě)方式是什么

當(dāng)請(qǐng)求量越來(lái)越大的時(shí)候,系統(tǒng)會(huì)慢慢出現(xiàn)瓶頸,由于數(shù)據(jù)庫(kù)的鏈接是有限的,無(wú)法支撐較高的QPS,所以我們要想一個(gè)辦法分擔(dān)數(shù)據(jù)庫(kù)的壓力,于是就有了雙寫(xiě),將數(shù)據(jù)寫(xiě)入緩存,客戶(hù)端讀取數(shù)據(jù)直接從緩存中讀取,這樣就可以提高系統(tǒng)的性能。

但是如果要使用雙寫(xiě),那么不管是先更新緩存還是先更新MySQL,總會(huì)有時(shí)間間隔,那么就要保證你的業(yè)務(wù)在一定程度上允許短暫的數(shù)據(jù)不一致的情況出現(xiàn),否則,還是不建議使用的.

那么就有人問(wèn)了?雙寫(xiě)一定不能保證強(qiáng)一致性嗎?

雙寫(xiě)方式是什么

答案是可以,只要把所有與其相關(guān)的讀寫(xiě)請(qǐng)求用隊(duì)列串行化,這樣就可以保證雙寫(xiě)的強(qiáng)一致性了,但是這樣會(huì)極大的降低系統(tǒng)的QPS,非常不推薦這種做法。

既然要雙寫(xiě),那么肯定會(huì)出現(xiàn)數(shù)據(jù)庫(kù)和緩存數(shù)據(jù)不一致的情況,要怎樣去避免呢?

雙寫(xiě)不一致問(wèn)題要怎么解決

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

這種情況會(huì)有什么問(wèn)題呢?我們看下圖:

雙寫(xiě)方式是什么

首先a先更新數(shù)據(jù)庫(kù),按照正常流程來(lái)走,緊接著要a線(xiàn)程刪除緩存,可是突然后面來(lái)了個(gè)b線(xiàn)程,并且a線(xiàn)程因?yàn)楦鞣N業(yè)務(wù)原因卡住了,導(dǎo)致b線(xiàn)程先完成了,之后a線(xiàn)程才更新緩存。這時(shí)突然有其他線(xiàn)程進(jìn)來(lái)讀數(shù)據(jù),就會(huì)讀到a的數(shù)據(jù),但是按照業(yè)務(wù)流程來(lái)走,應(yīng)該讀到b的數(shù)據(jù),此時(shí),就出現(xiàn)了數(shù)據(jù)錯(cuò)亂的問(wèn)題。

  • 1.線(xiàn)程a更新數(shù)據(jù)庫(kù)

  • 2.線(xiàn)程b更新數(shù)據(jù)庫(kù)

  • 3.線(xiàn)程b更新緩存

  • 4.線(xiàn)程a更新緩存

  • 5.其他線(xiàn)程讀數(shù)據(jù)(讀錯(cuò)了)

到這里我們會(huì)發(fā)現(xiàn),直接更新緩存是有很大的問(wèn)題的,而且很多時(shí)候,在復(fù)雜點(diǎn)的緩存場(chǎng)景,緩存不單單是數(shù)據(jù)庫(kù)中直接取出來(lái)的值,有可能是聯(lián)合其他的很多數(shù)據(jù)結(jié)合計(jì)算出來(lái)的一個(gè)值。

而且可能會(huì)有一種場(chǎng)景,我們經(jīng)常在更新數(shù)據(jù)庫(kù)后直接更新緩存,但是在此之間并沒(méi)有緩存被訪(fǎng)問(wèn)的需求,這樣我們就做了很多無(wú)用功,付出了很多代價(jià)。

大家應(yīng)該對(duì)單例模式有所了解,其中有一種懶加載的思想,就是說(shuō),在你需要的時(shí)候再去加載,用在雙寫(xiě)的情況下非常合適,也就有了下面這種先更新數(shù)據(jù)庫(kù),再刪除緩存的模式。

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

這種情況又會(huì)有什么問(wèn)題呢?

雙寫(xiě)方式是什么

當(dāng)然,這還是一種有問(wèn)題的方案,我們來(lái)跟著圖盤(pán)一盤(pán)。

1:線(xiàn)程a更新數(shù)據(jù)庫(kù)

2:程序掛了,沒(méi)來(lái)的及刪除緩存

3.其他線(xiàn)程來(lái)讀數(shù)據(jù)(全都是錯(cuò)的)

這種方案的問(wèn)題一目了然,只要程序掛了,就會(huì)出現(xiàn)數(shù)據(jù)讀錯(cuò)的情況,真實(shí)的業(yè)務(wù)你是應(yīng)該讀到a線(xiàn)程的值,卻一直在讀之前的值。

那這種方案有沒(méi)有優(yōu)化呢?

雙寫(xiě)方式是什么

當(dāng)然也有了,其實(shí)我們可以每次寫(xiě)入都記錄日志,然后修改結(jié)束后也記錄日志,通過(guò)日志狀態(tài)來(lái)判斷是否寫(xiě)入成功,

  • 如果沒(méi)有寫(xiě)入成功后續(xù)并且沒(méi)有新的寫(xiě)入請(qǐng)求,就補(bǔ)寫(xiě),

  • 否則不做處理。

但是這種情況也會(huì)出現(xiàn)不一致的問(wèn)題,就是如果寫(xiě)數(shù)據(jù)庫(kù)程序斷了,到下次恢復(fù)數(shù)據(jù)之前這段時(shí)間,還會(huì)出現(xiàn)數(shù)據(jù)不一致的情況。

并且如果是頻繁寫(xiě)入的情況,很有可能日志機(jī)制沒(méi)有發(fā)揮作用,就有新數(shù)據(jù)寫(xiě)入覆蓋,并且日志系統(tǒng)還要占用額外的資源。

我懂了!應(yīng)該先刪除緩存再更新數(shù)據(jù)庫(kù),這樣就可以了!

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

來(lái)來(lái)來(lái),繼續(xù)貼圖,是不是很熟悉?

雙寫(xiě)方式是什么

這種方案會(huì)有問(wèn)題嗎??當(dāng)然有,繼續(xù)盤(pán)道:

  • 1:線(xiàn)程a刪除緩存

  • 2:線(xiàn)程b刪除緩存

  • 3:線(xiàn)程a卡了

  • 4:線(xiàn)程b更新數(shù)據(jù)庫(kù)

  • 5:線(xiàn)程a更新數(shù)據(jù)

  • 6:其他線(xiàn)程讀數(shù)據(jù),讀到了a的(又錯(cuò)了)

完了,這種情況居然也有問(wèn)題,線(xiàn)程a到底行不行,每次都是你出事。

這種情況中間會(huì)有一段數(shù)據(jù)亂掉,但是隨著下次的更新數(shù)據(jù)還是會(huì)恢復(fù)正確。

難道終極方案是先刪除緩存,再更新數(shù)據(jù)庫(kù),再更新緩存??

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

繼續(xù)貼圖

雙寫(xiě)方式是什么

  • 1.線(xiàn)程a刪除緩存

  • 2.其他線(xiàn)程讀取數(shù)據(jù),讀到的是a之前的數(shù)據(jù)

  • 3.線(xiàn)程a更新數(shù)據(jù)庫(kù)

  • 4.線(xiàn)程a刪除緩存

  • 5.其他線(xiàn)程設(shè)置緩存數(shù)據(jù),是a之前的數(shù)據(jù)(此時(shí)應(yīng)該是a的)

大家是不是又發(fā)現(xiàn)了,這種設(shè)計(jì)方案還是會(huì)有問(wèn)題的,直到下次數(shù)據(jù)更新才有可能將數(shù)據(jù)恢復(fù)正確。

來(lái)吧,最后一種大家經(jīng)常討論的延時(shí)雙刪方案,我們一起盤(pán)一盤(pán)。

五.延時(shí)雙刪

go on

雙寫(xiě)方式是什么

  • 1.先刪除緩存

  • 2.再寫(xiě)數(shù)據(jù)庫(kù)

  • 3.休眠一段時(shí)間(根據(jù)具體的業(yè)務(wù)時(shí)間來(lái)定)

  • 4.再次刪除緩存

這里加了一個(gè)延時(shí)的操作,目的是確保 修改數(shù)據(jù)庫(kù) -> 清空緩存前,其他事務(wù)的更改緩存操作已經(jīng)執(zhí)行完。

所有的寫(xiě)操作以數(shù)據(jù)庫(kù)為準(zhǔn),只要到達(dá)緩存過(guò)期時(shí)間,則后面的讀請(qǐng)求自然會(huì)從數(shù)據(jù)庫(kù)中讀取新值然后回填緩存。

但這其中難免還是會(huì)大量的查詢(xún)到舊緩存數(shù)據(jù)的,因?yàn)檠訒r(shí)時(shí)間是根據(jù)業(yè)務(wù)自己定義的,時(shí)間太長(zhǎng)和太短在高并發(fā)情況下都會(huì)有查詢(xún)到臟數(shù)據(jù)的情況產(chǎn)生。

這樣最差的情況就是在超時(shí)時(shí)間內(nèi)數(shù)據(jù)存在不一致。

到此,相信大家對(duì)“雙寫(xiě)方式是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:雙寫(xiě)方式是什么
瀏覽地址:http://chinadenli.net/article42/ppihhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、建站公司、定制開(kāi)發(fā)、關(guān)鍵詞優(yōu)化虛擬主機(jī)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)