MySQL 數據同步到 Redis 緩存- so Easy -

來源:dongshao.blog.csdn.net/article/details/107190925

本文介紹 MySQL 與 Redis 緩存的同步的兩種方案

一、方案 1(UDF)

演示案例

  • 下面是 MySQL 的表

  • 下面是 UDF 的解析代碼

  • 定義對應的觸發器

二、方案 2(解析 binlog)

Canal 開源技術

  • canal 是阿里巴巴旗下的一款開源項目,純 Java 開發。基於數據庫增量日誌解析,提供增量數據訂閱 & 消費,目前主要支持了 MySQL(也支持 mariaDB)

  • 開源參考地址有:https://github.com/liukelin/canal_mysql_nosql_sync

  • 工作原理(模仿 MySQL 複製):

  • canal 模擬 mysql slave 的交互協議,僞裝自己爲 mysql slave,向 mysql master 發送 dump 協議

  • mysql master 收到 dump 請求,開始推送 binary log 給 slave(也就是 canal)

  • canal 解析 binary log 對象(原始爲 byte 流)

  • 架構:

  • eventParser (數據源接入,模擬 slave 協議和 master 進行交互,協議解析)

  • eventSink (Parser 和 Store 鏈接器,進行數據過濾,加工,分發的工作)

  • eventStore (數據存儲)

  • metaManager (增量訂閱 & 消費信息管理器)

  • server 代表一個 canal 運行實例,對應於一個 jvm

  • instance 對應於一個數據隊列 (1 個 server 對應 1..n 個 instance)

  • instance 模塊:

  • 大致的解析過程如下:

  • parse 解析 MySQL 的 Bin log,然後將數據放入到 sink 中

  • sink 對數據進行過濾,加工,分發

  • store 從 sink 中讀取解析好的數據存儲起來

  • 然後自己用設計代碼將 store 中的數據同步寫入 Redis 中就可以了

  • 其中 parse/sink 是框架封裝好的,我們做的是 store 的數據讀取那一步

  • 更多關於 Cancl 可以百度搜索

  • 下面是運行拓撲圖

  • MySQL 表的同步,採用責任鏈模式,每張表對應一個 Filter 。例如 zvsync 中要用到的類設計如下:

  • 下面是具體化的 zvsync 中要用到的類 ,每當新增或者刪除表時,直接進行增刪就可以了

三、附加

本文上面所介紹的都是從 MySQL 中同步到緩存中。

但是在實際開發中可能有人會用下面的方案:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/4cISZQiN8csuYdh0afoxWA