91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

鄂温| 忻州市| 博野县| 嘉定区| 会东县| 榆树市| 龙川县| 浦东新区| 宣恩县| 茶陵县| 堆龙德庆县| 榆树市| 永泰县| 临武县| 姜堰市| 股票| 布拖县| 孟州市| 石首市| 阳高县| 固原市| 广昌县| 子洲县| 新余市| 天长市| 莱西市| 县级市| 苍山县| 濉溪县| 阿拉善左旗| 本溪| 绥中县| 准格尔旗| 台江县| 武清区| 三门县| 青浦区| 鄂托克旗| 吉林市| 乌审旗| 同仁县|