本文介紹MySQL與Redis緩存的同步的兩種方案
場景分析:當(dāng)我們對MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)操作時,同時將相應(yīng)的數(shù)據(jù)同步到Redis中,同步到Redis之后,查詢的操作就從Redis中查找
過程大致如下:
在MySQL中對要操作的數(shù)據(jù)設(shè)置觸發(fā)器Trigger,監(jiān)聽操作
客戶端(NodeServer)向MySQL中寫入數(shù)據(jù)時,觸發(fā)器會被觸發(fā),觸發(fā)之后調(diào)用MySQL的UDF函數(shù)
UDF函數(shù)可以把數(shù)據(jù)寫入到Redis中,從而達(dá)到同步的效果
方案分析:
下面是MySQL的表
下面是UDF的解析代碼
定義對應(yīng)的觸發(fā)器
在介紹方案2之前我們先來介紹一下MySQL復(fù)制的原理,如下圖所示:
方案2就是:
例如下面是一個云數(shù)據(jù)庫實(shí)例分析:
云數(shù)據(jù)庫與本地數(shù)據(jù)庫是主從關(guān)系。云數(shù)據(jù)庫作為主數(shù)據(jù)庫主要提供寫,本地數(shù)據(jù)庫作為從數(shù)據(jù)庫從主數(shù)據(jù)庫中讀取數(shù)據(jù)
本地數(shù)據(jù)庫讀取到數(shù)據(jù)之后,解析Bin log,然后將數(shù)據(jù)寫入寫入同步到Redis中,然后客戶端從Redis讀數(shù)據(jù)
這個技術(shù)方案的難點(diǎn)就在于:如何解析MySQL的Bin Log。但是這需要對binlog文件以及MySQL有非常深入的理解,同時由于binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實(shí)現(xiàn)同步的工作量是非常大的
canal是阿里巴巴旗下的一款開源項(xiàng)目,純Java開發(fā)?;跀?shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱消費(fèi),目前主要支持了MySQL(也支持mariaDB)
開源參考地址有:https://github.com/liukelin/canal_mysql_nosql_sync
工作原理(模仿MySQL復(fù)制):
架構(gòu):
server代表一個canal運(yùn)行實(shí)例,對應(yīng)于一個jvm
instance對應(yīng)于一個數(shù)據(jù)隊列 (1個server對應(yīng)1..n個instance)
instance模塊:
大致的解析過程如下:
更多關(guān)于Cancl可以百度搜索
下面是運(yùn)行拓?fù)鋱D
MySQL表的同步,采用責(zé)任鏈模式,每張表對應(yīng)一個Filter。例如zvsync中要用到的類設(shè)計如下:
下面是具體化的zvsync中要用到的類,每當(dāng)新增或者刪除表時,直接進(jìn)行增刪就可以了
本文上面所介紹的都是從MySQL中同步到緩存中。但是在實(shí)際開發(fā)中可能有人會用下面的方案:
到此這篇關(guān)于淺談MySQL與redis緩存的同步方案的文章就介紹到這了,更多相關(guān)MySQL與redis緩存同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:黑河 滄州 吉林 隨州 錦州 甘南 荊州 資陽
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談MySQL與redis緩存的同步方案》,本文關(guān)鍵詞 淺談,MySQL,與,redis,緩存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。