Redis 和 MySQL 資料不一致性
阿新 • • 發佈:2022-03-22
Redis 和 MySQL 資料不一致性#
具體如何去解決還得結合業務去綜合考慮。
下面幾個方式可能比較通用
1. 雙刪法#
寫流程
- 先刪除快取
- 寫更新資料庫
- 再次刪除快取 => 避免在第二步的時候有讀請求訪問資料庫,然後把舊的值寫入到快取中
讀流程
- 先讀快取
- 快取沒有就讀資料庫
- 更新快取
這其實是一種懶載入,即只有當讀的時候才會從資料庫把最新的值載入到快取裡,是讀流程啟用的載入,而不是寫流程在寫入新值的時候自動重新整理載入
主動載入的話,萬一多個並行操作同時對一個key進行更新,需要考慮操作的冪等性,採用MQ的分割槽機制來保證同一分割槽內的操作都是順序序列化執行
雙刪失敗如何處理?
- 設定快取過期時間,從理論上來說,給快取設定過期時間,是保證最終一致性的解決方案
- 重試 => 重試有業務通過mq重試以及元件消費mysql的binlog再寫入mq重試兩種方式
2. 非同步延遲刪除#
在雙刪的基礎上,採用 非同步延遲刪除
- 先刪除快取
- 寫更新資料庫
- 觸發非同步寫入序列化MQ(也可以採取一種key+version的分散式鎖
- MQ接受再次刪除快取