1. 程式人生 > >分散式的環境下, MySQL和Redis如何保持資料的一致性?

分散式的環境下, MySQL和Redis如何保持資料的一致性?

問題:

一臺MySQL,一臺Redis,兩臺應用伺服器,使用者的資料儲存持久化在MySQL中,快取在Redis,有請求的時候從Redis中獲取快取的使用者資料,有修改則同時修改MySQL和Redis中的資料。現在問題是:

1. 先儲存到MySQL和先儲存到Redis都面臨著一個儲存成功而另外一個儲存失敗的情況,這樣,如何保證MySQL與Redis中的資料同步?

2. 兩臺應用伺服器的併發訪問,如何保證資料的安全性?

解決方法:

資料庫和快取之間一般不需要強一致性。

一般快取是這樣的:

  • 讀的順序是先讀快取,後讀資料庫
  • 寫的順序是先寫資料庫,然後寫快取
  • 每次更新了相關的資料,都要把該快取清理掉
  • 為了避免極端條件下造成的快取與資料庫之間的資料不一致,快取需要設定一個失效時間。時間到了,快取自動被清理,達到快取和資料庫資料的“最終一致性”



知乎上面的回答,先應付面試,遇到再深入

作者:Doing
連結:https://www.zhihu.com/question/36413559/answer/310691736
連結:https://github.com/liukelin/canal_mysql_nosql_sync