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

溫馨提示×

溫馨提示×

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

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

如何保持MySQL和Redis中的數據一致

發布時間:2021-09-13 18:09:56 來源:億速云 閱讀:175 作者:柒染 欄目:MySQL數據庫

這篇文章給大家介紹如何保持MySQLRedis中的數據一致,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在高并發的業務場景下,MySQL和Redis的數據一致性就顯得很重要了,多次訪問MySQL就會導致奔潰或者延緩速度,而緩存Redis過多也會出問題,那就是丟數據,存著存著,數據就丟了

Redis 在互聯網行業中使用最為廣泛。在很多時候也被稱為“內存數據庫”,它集合了緩存和數據庫的優勢,但并非開啟持久化和主備同步機制就可以高枕無憂。

寫入數據庫成功,即讓緩存失效,下一次讀取時再緩存。這是緩存的實時策略。

從架構設計的角度思考:緩存就是緩存,緩存數據會隨時丟失,緩存存在的目的是攔截到數據庫的請求,相比數據的可靠性、一致性,還是吞吐量、穩定性優先。

在考慮數據一致性的問題上由三種刷新策略

  1. 實時策略

  2. 異步策略

  3. 定時策略

實時策略是最常用的策略,能夠讓用戶有最好的體驗,但是一旦數據量過大就會出現,數據苦往往會受不了

異步策略適用于,數據量大,但是數據并不重要,因為可能會導致臟數據或者數據丟失

定時策略適用于,數據量大,數據也很重要的情況下,這也是最穩定的方案

讀取的過程,應用程序先從 cache 取數據,沒有得到,則從數據庫中取數據,成功后,放到緩存中。如果命中,應用程序從 cache 中取數據,取到后返回。

寫入的過程,把數據存到數據庫中,成功后,再刪除緩存,刪除后下次讀取的時候,會被寫入緩存。

從用戶體驗的角度,應該數據庫有了寫入,就馬上廢棄緩存,觸發一次數據庫的讀取,從而更新緩存。

然而,這和高并發就矛盾了——如果所有的都實時從數據庫里面讀取,高并發場景下,數據庫往往受不了。

在讀取寫入數據時,適用定時策略一般不會出問題

  1. MySQL持久化數據,Redis只讀數據

  2. MySQL和Redis處理不同的數據類型
    MySQL處理實時性數據,Redis處理對實時性要求并不是很高的數據。在并發不高的情況下,讀取操作優先讀取redis,不存在的話再去訪問MySQL,并把讀取到的數據寫回Redis中;寫入操作直接寫MySQL,然后后再寫入Redis。在并發高的情況下,讀取操作和上面一樣,寫入操作則使用異步寫入,先寫入Redis后直接返回,然后定時定期的寫入MySQL

而一旦涉及到更新數據,就容易出現緩存和數據庫之間的數據一致性的問題,不管是先寫入數據庫再刪除緩存,還是先刪除緩存再寫入數據庫,都有可能出現數據不一致的情況,例如:

  • 先寫入數據庫,再刪除緩存前,線程宕機了,沒有刪除掉緩存,就會出現數據不一致的情況

  • 先刪除Redis,還沒來得及寫入數據庫,另外一個線程就來讀取,發現緩存為空,這個時候就會跑去數據庫讀取數據寫入緩存,這個時候緩存中的數據就是臟數據

因為寫入和讀取是并發的,沒有辦法保證順序,就會出現緩存和數據庫的數據是不一致的問題,這時候就可以使用

延時雙刪策略

在寫庫前后都進行Redis.del(key)操作,并且設定合理地超時時間

  1. 先刪緩存

  2. 再寫數據庫

  3. 休眠一段時間

  4. 再刪緩存

設置緩存的過期時間

理論上來講,設置緩存過期時間,是保證最終一致性的解決方案。所有的寫入操作以數據庫為準,只要到達緩存過期時間,則后面的讀請求自然會從數據庫中讀取新值然后回填緩存

關于如何保持MySQL和Redis中的數據一致就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

福海县| 河东区| 四川省| 子长县| 若尔盖县| 都江堰市| 铜鼓县| 达尔| 肥东县| 同德县| 无锡市| 都江堰市| 囊谦县| 黄山市| 达日县| 黑龙江省| 广水市| 视频| 买车| 邯郸县| 盱眙县| 磴口县| 青冈县| 曲沃县| 元江| 治多县| 新乡县| 寻乌县| 朝阳市| 龙江县| 宜宾市| 四会市| 浮山县| 安仁县| 东乌珠穆沁旗| 商水县| 左权县| 昭觉县| 平定县| 桂平市| 蒲城县|