国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

怎么實(shí)現MySQL與Redis緩存的同步

發(fā)布時(shí)間:2021-08-17 12:35 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 服務(wù)器 歡迎投稿:712375056

本篇內容主要講解“怎么實(shí)現與緩存的同步”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“怎么實(shí)現MySQL與Redis緩存的同步”吧!


 

一、方案1(UDF)

 
場(chǎng)景分析:

當我們對MySQL數據進(jìn)行數據操作時(shí),同時(shí)將相應的數據同步到Redis中,同步到Redis之后,查詢(xún)的操作就從Redis中查找

 
過(guò)程大致如下:
  • 在MySQL中對要操作的數據設置觸發(fā)器Trigger,監聽(tīng)操作
  • 客戶(hù)端(NodeServer)向MySQL中寫(xiě)入數據時(shí),觸發(fā)器會(huì )被觸發(fā),觸發(fā)之后調用MySQL的UDF函數
  • UDF函數可以把數據寫(xiě)入到Redis中,從而達到同步的效果

 
方案分析:
  • 這種方案適合于讀多寫(xiě)少,并且不存并發(fā)寫(xiě)的場(chǎng)景
  • 因為MySQL觸發(fā)器本身就會(huì )造成效率的降低,如果一個(gè)表經(jīng)常被操作,這種方案顯示是不合適的,歡迎關(guān)注:武哥聊編程
 

演示案例

下面是MySQL的表

 

下面是UDF的解析代碼

 

定義對應的觸發(fā)器

   

二、方案2(解析binlog)

在介紹方案2之前我們先來(lái)介紹一下MySQL復制的原理,如下圖所示:

  • 主操作數據,并將數據寫(xiě)入Bin log
  • 服務(wù)器調用I/O線(xiàn)程讀取主服務(wù)器的Bin log,并且寫(xiě)入到自己的Relay log中,再調用SQL線(xiàn)程從Relay log中解析數據,從而同步到自己的數據庫中

方案2就是:

  • 上面MySQL的整個(gè)復制流程可以總結為一句話(huà),那就是:從服務(wù)器讀取主服務(wù)器Bin log中的數據,從而同步到自己的數據庫中
  • 我們方案2也是如此,就是在概念上把主服務(wù)器改為MySQL,把從服務(wù)器改為Redis而已(如下圖所示),當MySQL中有數據寫(xiě)入時(shí),我們就解析MySQL的Bin log,然后將解析出來(lái)的數據寫(xiě)入到Redis中,從而達到同步的效果
 

例如下面是一個(gè)實(shí)例分析:

  • 云數據庫與本地數據庫是主從關(guān)系。云數據庫作為主數據庫主要提供寫(xiě),本地數據庫作為從數據庫從主數據庫中讀取數據
  • 本地數據庫讀取到數據之后,解析Bin log,然后將數據寫(xiě)入寫(xiě)入同步到Redis中,然后客戶(hù)端從Redis讀數據
 

這個(gè)技術(shù)方案的難點(diǎn)就在于: 如何解析MySQL的Bin Log。但是這需要對binlog文件以及MySQL有非常深入的理解,同時(shí)由于binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實(shí)現同步的工作量是非常大的

 

Canal開(kāi)源技術(shù)

canal是阿里巴巴旗下的一款開(kāi)源項目,純Java開(kāi)發(fā)?;跀祿煸隽咳罩窘馕?,提供增量數據訂閱&消費,目前主要支持了MySQL(也支持mariaDB)

開(kāi)源參考地址有:https://github.com/liukelin/canal_mysql__sync

 
工作原理(模仿MySQL復制):
  • canal模擬mysql slave的交互協(xié)議,偽裝自己為mysql slave,向mysql master發(fā)送dump協(xié)議
  • mysql master收到dump請求,開(kāi)始推送binary log給slave(也就是canal)
  • canal解析binary log對象(原始為byte流)
   
架構:

server代表一個(gè)canal運行實(shí)例,對應于一個(gè)jvm

instance對應于一個(gè)數據隊列 (1個(gè)server對應1..n個(gè)instance)

instance模塊:

  • eventParser (數據源接入,模擬slave協(xié)議和master進(jìn)行交互,協(xié)議解析)
  • eventSink (Parser和Store鏈接器,進(jìn)行數據過(guò)濾,加工,分發(fā)的工作)
  • eventStore (數據存儲)
  • metaManager (增量訂閱&消費信息管理器)
 

大致的解析過(guò)程如下:

  • parse解析MySQL的Bin log,然后將數據放入到sink中
  • sink對數據進(jìn)行過(guò)濾,加工,分發(fā)
  • store從sink中讀取解析好的數據存儲起來(lái)
  • 然后自己用設計代碼將store中的數據同步寫(xiě)入Redis中就可以了
  • 其中parse/sink是框架封裝好的,我們做的是store的數據讀取那一步
 

更多關(guān)于Cancl可以百度搜索

 
下面是運行拓撲圖
 

MySQL表的同步,采用責任鏈模式,每張表對應一個(gè)Filter。例如zvsync中要用到的類(lèi)設計如下:

 

下面是具體化的zvsync中要用到的類(lèi),每當新增或者刪除表時(shí),直接進(jìn)行增刪就可以了

   

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲AV无码成人影院一区| 办公室娇喘的短裙老师在线视频| 丰满爆乳无码一区二区三区| 国产欧美日韩亚洲精品区| 久久99久国产麻精品66| 无尺码精品产品2023|