Redis 和 MySQL 資料不一致性

2022-07-11 17:51:12 字數 648 閱讀 3343

date: 2020-11-25 15:16:00

updated: 2020-11-25 15:55:00

參考位址

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

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

寫流程先刪除快取

寫更新資料庫

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

讀流程先讀快取

快取沒有就讀資料庫

更新快取

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

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

雙刪失敗如何處理?

設定快取過期時間,從理論上來說,給快取設定過期時間,是保證最終一致性的解決方案

重試 => 重試有業務通過mq重試以及元件消費mysql的binlog再寫入mq重試兩種方式

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

先刪除快取

寫更新資料庫

觸發非同步寫入序列化mq(也可以採取一種key+version的分布式鎖

mq接受再次刪除快取

如何解決Redis 和MySQL的資料不一致

redis在啟動之後,從資料庫載入資料。在處理讀請求時 不要求強一致性的讀請求,直接從redis中讀取,要求強一致性的直接從mysql讀取。在處理寫請求時 將資料首先都寫到資料庫,之後再更新到redis 如果先寫redis再寫mysql,寫入失敗事務回滾會造成redis中存在髒資料 mysql資料庫...

如何保持mysql和redis中資料的一致性

快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒啥疑問,都是按照下圖的流程來進行業務操作。在快取和資料庫同時存在時,如果有寫操作的時候,先運算元據庫還是先操作快取呢?先思考一下,可能會存在哪些問題,再往下看。這套方案,大家是普遍反對的。為什麼呢?有如下兩點原因。3.1....

redis和mysql怎樣保持資料一致

服務端獲取資料首先從redis獲取,如果redis中的資料被刪除就從mysql中獲取資料,在把資料更新到redis 1.redis設定固定時間更新,時間不宜太長,缺點是修改mysql資料不會立即更新 2.更新mysql時同時刪除redis的資料,但這個操作不是原子性的,如果這個時候有其他執行緒插進來...