中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

?怎么保證Redis和數據庫的一致性

發布時間:2020-06-25 18:18:48 來源:億速云 閱讀:223 作者:Leah 欄目:關系型數據庫

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

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

保證Redis與數據庫的一致性呢?

So easy:                  

更新的時候,先更新數據庫,然后再刪除緩存。

讀的時候,先讀緩存;如果沒有的話,就讀數據庫,同時將數據放入緩存,并返回響應。

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

改進方案:

先刪除緩存,后更新數據庫。因為即使后面更新數據庫失敗了,緩存是空的,讀的時候會從數據庫中重新拉,雖然都是舊數據,但數據是一致的。

所以方案就變成了:

更新的時候,先刪除緩存,然后再更新數據庫。

讀的時候,先讀緩存;如果沒有的話,就讀數據庫,同時將數據放入緩存,并返回響應。

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

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

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

?怎么保證Redis和數據庫的一致性解決方案:

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

?怎么保證Redis和數據庫的一致性

關于怎么保證Redis和數據庫的一致性問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永靖县| 新津县| 邢台县| 名山县| 溧水县| 光泽县| 菏泽市| 旌德县| 青冈县| 武平县| 满城县| 左贡县| 嘉禾县| 韶山市| 安福县| 新闻| 安乡县| 南皮县| 禄丰县| 平度市| 朝阳县| 石屏县| 延庆县| 肇东市| 枣庄市| 长垣县| 贺州市| 吴川市| 汉源县| 江陵县| 治县。| 高青县| 自贡市| 海阳市| 田林县| 子洲县| 威信县| 武隆县| 双桥区| 凉城县| 鄂托克旗|