分散式的環境下, MySQL和Redis如何保持資料的一致性?
阿新 • • 發佈:2018-12-25
問題:
一臺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