1. 程式人生 > 其它 >Redis 和 MySQL 資料不一致性

Redis 和 MySQL 資料不一致性

Redis 和 MySQL 資料不一致性#

參考地址

具體如何去解決還得結合業務去綜合考慮。

下面幾個方式可能比較通用

1. 雙刪法#

寫流程

  1. 先刪除快取
  2. 寫更新資料庫
  3. 再次刪除快取 => 避免在第二步的時候有讀請求訪問資料庫,然後把舊的值寫入到快取中

讀流程

  1. 先讀快取
  2. 快取沒有就讀資料庫
  3. 更新快取

這其實是一種懶載入,即只有當讀的時候才會從資料庫把最新的值載入到快取裡,是讀流程啟用的載入,而不是寫流程在寫入新值的時候自動重新整理載入

主動載入的話,萬一多個並行操作同時對一個key進行更新,需要考慮操作的冪等性,採用MQ的分割槽機制來保證同一分割槽內的操作都是順序序列化執行

雙刪失敗如何處理?

  1. 設定快取過期時間,從理論上來說,給快取設定過期時間,是保證最終一致性的解決方案
  2. 重試 => 重試有業務通過mq重試以及元件消費mysql的binlog再寫入mq重試兩種方式

2. 非同步延遲刪除#

在雙刪的基礎上,採用 非同步延遲刪除

  1. 先刪除快取
  2. 寫更新資料庫
  3. 觸發非同步寫入序列化MQ(也可以採取一種key+version的分散式鎖
  4. MQ接受再次刪除快取