切換語言為:簡體

面試題:如何解決快取和資料庫的一致性問題?

  • 爱糖宝
  • 2024-07-23
  • 2076
  • 0
  • 0

所謂的一致性問題是指,在同時使用快取和資料庫的情況下,要確保資料在快取與資料庫中的更新操作保持同步。也就是當對資料進行修改時,無論是先修改快取還是先修改資料庫,最終都要保證兩者的資料是一樣的,不會出現資料不一樣的問題。

1.一致性問題解決方案

快取和資料庫一致性的經典解決方案有以下兩個:

  1. 使用延遲雙刪 + MQ 保證資料的一致性。

  2. 透過 Canal 監聽 MySQL 的 Binlog 寫入日誌,之後將寫入操作(增加、刪除和修改)的資訊傳送至 Kafka,程式監聽到 Kafka 的訊息後更新 Redis,從而保證資料的最終一致性。

需要注意的是,無論使用的是延遲雙刪還是 Canal,都會出現短暫資料不一致性的問題,但可以保證最終的資料一致性。

然而,如果使用的是延遲雙刪 + MQ 的這種方式的時候,有一個棘手的問題很難處理,那就是如何設定延遲時間?

如果延遲時間設定的比較短,那麼在併發場景下會出現資料不一致的問題;如果延遲時間設定的比較長,那麼在比較長的這段時間內還會有資料不一致的問題。這個問題歸根到底的原因是,併發執行緒的排程時間不能人為的控制(由作業系統統一排程)。

所以基於以上原因,使用 Canal 來保證資料一致性問題變成了一個比較不錯的解決 Redis 和 MySQL 資料一致性的有效手段。

2.Canal執行流程

透過 Canal 保證資料一致性的實現流程如下圖所示:面試題:如何解決快取和資料庫的一致性問題?

3.Canal操作流程

使用 Canal 讀取 MySQL 的 Binlog 配置步驟如下:

  1. 開啟並配置 MySQL 的 Binlog 設定。

  2. 重啟 MySQL 服務。

  3. 給 MySQL 配置 canal/canal 使用者用於後續 Canal 同步資料(此步驟非必須)。

  4. 安裝並解壓 Canal。

  5. 修改 canal.properties 配置檔案,讓其將資料同步到 Kafka,並配置 Kafka 伺服器資訊。

  6. 修改 example/instance.properties 配置檔案,指定同步資料到 Kafka 某個主題。

  7. 複製 plugin 中的 jar 包到 lib 目錄,讓 Canal 支援將資料同步到 MQ。

  8. 啟動 Canal 服務。

  9. 在程式碼中監聽 Kafka 主題,並判斷並更新 Redis 快取。

Kafka 中儲存的資料格式如下:面試題:如何解決快取和資料庫的一致性問題?

4.最後

理論如同明燈照亮前行的道路,實踐則是我們堅實的腳步。唯有將兩者緊密結合,不斷地練習和實踐,我們才能在求知的旅程中穩步前行,收穫真正的成長與進步。所以,一起行動起來,光看不練都是假把式。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.