亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

?怎么保證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

进贤县| 宁津县| 汉中市| 喜德县| 手游| 清苑县| 大连市| 崇义县| 德州市| 湘潭市| 宜黄县| 茌平县| 和龙市| 金华市| 大庆市| 蓝田县| 招远市| 定兴县| 石棉县| 万载县| 禄丰县| 许昌县| 吴旗县| 呼和浩特市| 岳普湖县| 万年县| 夏邑县| 仪陇县| 博湖县| 扶余县| 醴陵市| 张家川| 平舆县| 会宁县| 汾西县| 丰县| 肥东县| 普陀区| 东乡| 中宁县| 信宜市|