真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

?怎么保證Redis和數(shù)據(jù)庫的一致性

怎么保證redis和數(shù)據(jù)庫的一致性?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站主營平桂網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),平桂h5小程序開發(fā)搭建,平桂網(wǎng)站營銷推廣歡迎平桂等地區(qū)企業(yè)咨詢

一般來說,只要你用到了緩存,不管是Redis還是memcache,就可能會涉及到數(shù)據(jù)庫緩存與數(shù)據(jù)的一致性問題,這里我們以Redis為例。

保證Redis與數(shù)據(jù)庫的一致性呢?

So easy:                 

更新的時候,先更新數(shù)據(jù)庫,然后再刪除緩存。

讀的時候,先讀緩存;如果沒有的話,就讀數(shù)據(jù)庫,同時將數(shù)據(jù)放入緩存,并返回響應(yīng)。

乍一看,一致性問題貌似很好的得到了解決。但仔細(xì)一想,你會發(fā)現(xiàn)還是有問題:如果先更新了數(shù)據(jù)庫,刪除緩存的時候失敗了怎么辦?那么數(shù)據(jù)庫中是新數(shù)據(jù),緩存中是老數(shù)據(jù),數(shù)據(jù)出現(xiàn)不一致了。

改進(jìn)方案:

先刪除緩存,后更新數(shù)據(jù)庫。因?yàn)榧词购竺娓聰?shù)據(jù)庫失敗了,緩存是空的,讀的時候會從數(shù)據(jù)庫中重新拉,雖然都是舊數(shù)據(jù),但數(shù)據(jù)是一致的。

所以方案就變成了:

更新的時候,先刪除緩存,然后再更新數(shù)據(jù)庫。

讀的時候,先讀緩存;如果沒有的話,就讀數(shù)據(jù)庫,同時將數(shù)據(jù)放入緩存,并返回響應(yīng)。

到這里是不是問題就得到了徹底的解決了呢?

其實(shí)并沒有,在高并發(fā)的場景下,會出現(xiàn)這樣的情況:數(shù)據(jù)發(fā)生了變更,先刪除了緩存,然后去修改數(shù)據(jù)庫。此時還沒來得及修改,一個請求過來了,去讀緩存,發(fā)現(xiàn)緩存空了,去讀數(shù)據(jù)庫,讀到了準(zhǔn)備修改前的舊數(shù)據(jù),并且把舊數(shù)據(jù)放到了緩存。

隨后,數(shù)據(jù)變更程序完成了數(shù)據(jù)庫的修改。那么完了,這個時候發(fā)生數(shù)據(jù)不一致了......

?怎么保證Redis和數(shù)據(jù)庫的一致性解決方案:

針對這種情況,可以先把“修改DB”的操作放到一個JVM隊列,后面讀請求過來之后,“更新緩存”的操作也放進(jìn)同一個JVM隊列,每個隊列,對于一個作業(yè)線程,按照隊列的順序,依次執(zhí)行相關(guān)操作,這樣就可以保證“更新緩存”一定是在DB修改之后,以保證數(shù)據(jù)一致性,具體如下圖所示:

?怎么保證Redis和數(shù)據(jù)庫的一致性

關(guān)于怎么保證Redis和數(shù)據(jù)庫的一致性問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


分享標(biāo)題:?怎么保證Redis和數(shù)據(jù)庫的一致性
URL鏈接:http://weahome.cn/article/gogdes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部