国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 淺談MySQL與redis緩存的同步方案

淺談MySQL與redis緩存的同步方案

2021-04-23 17:17江南、董少 Mysql

這篇文章主要介紹了淺談MySQL與redis緩存的同步方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文介紹mysql與redis緩存的同步的兩種方案

  • 方案1:通過mysql自動同步刷新redis,mysql觸發器+udf函數實現
  • 方案2:解析mysql的binlog實現,將數據庫中的數據同步到redis

一、方案1(udf)

 

場景分析:當我們對mysql數據庫進行數據操作時,同時將相應的數據同步到redis中,同步到redis之后,查詢的操作就從redis中查找

過程大致如下:

在mysql中對要操作的數據設置觸發器trigger,監聽操作

客戶端(nodeserver)向mysql中寫入數據時,觸發器會被觸發,觸發之后調用mysql的udf函數

udf函數可以把數據寫入到redis中,從而達到同步的效果

淺談MySQL與redis緩存的同步方案

方案分析:

  • 這種方案適合于讀多寫少,并且不存并發寫的場景
  • 因為mysql觸發器本身就會造成效率的降低,如果一個表經常被操作,這種方案顯示是不合適的

演示案例

 

下面是mysql的表

淺談MySQL與redis緩存的同步方案

下面是udf的解析代碼

淺談MySQL與redis緩存的同步方案

定義對應的觸發器

淺談MySQL與redis緩存的同步方案

淺談MySQL與redis緩存的同步方案

淺談MySQL與redis緩存的同步方案

二、方案2(解析binlog)

 

在介紹方案2之前我們先來介紹一下mysql復制的原理,如下圖所示:

  • 主服務器操作數據,并將數據寫入bin log
  • 從服務器調用i/o線程讀取主服務器的bin log,并且寫入到自己的relay log中,再調用sql線程從relay log中解析數據,從而同步到自己的數據庫中

淺談MySQL與redis緩存的同步方案

方案2就是:

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

淺談MySQL與redis緩存的同步方案

例如下面是一個云數據庫實例分析:

云數據庫與本地數據庫是主從關系。云數據庫作為主數據庫主要提供寫,本地數據庫作為從數據庫從主數據庫中讀取數據

本地數據庫讀取到數據之后,解析bin log,然后將數據寫入寫入同步到redis中,然后客戶端從redis讀數據

淺談MySQL與redis緩存的同步方案

這個技術方案的難點就在于:如何解析mysql的bin log。但是這需要對binlog文件以及mysql有非常深入的理解,同時由于binlog存在statement/row/mixedlevel多種形式,分析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流)

淺談MySQL與redis緩存的同步方案

架構:

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

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

instance模塊:

  •  eventparser (數據源接入,模擬slave協議和master進行交互,協議解析)
  • eventsink (parser和store鏈接器,進行數據過濾,加工,分發的工作)
  • eventstore (數據存儲)
  • metamanager (增量訂閱&消費信息管理器)

淺談MySQL與redis緩存的同步方案

大致的解析過程如下:

  • parse解析mysql的bin log,然后將數據放入到sink中
  • sink對數據進行過濾,加工,分發
  • store從sink中讀取解析好的數據存儲起來
  • 然后自己用設計代碼將store中的數據同步寫入redis中就可以了
  • 其中parse/sink是框架封裝好的,我們做的是store的數據讀取那一步

淺談MySQL與redis緩存的同步方案

更多關于cancl可以百度搜索

下面是運行拓撲圖

淺談MySQL與redis緩存的同步方案

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

淺談MySQL與redis緩存的同步方案

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

淺談MySQL與redis緩存的同步方案

三、附加

 

本文上面所介紹的都是從mysql中同步到緩存中。但是在實際開發中可能有人會用下面的方案:

  • 客戶端有數據來了之后,先將其保存到redis中,然后再同步到mysql中
  • 這種方案本身也是不安全/不可靠的,因此如果redis存在短暫的宕機或失效,那么會丟失數據

淺談MySQL與redis緩存的同步方案

到此這篇關于淺談mysql與redis緩存的同步方案的文章就介紹到這了,更多相關mysql與redis緩存同步內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://dongshao.blog.csdn.net/article/details/107190925

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www.91看片| 毛片网站大全 | 亚洲视频综合网 | 久久久国产精品入口麻豆 | 免费看黄色影片 | 亚洲精品欧美在线 | 中文字幕视频在线 | 成人性生交大片免费看网站 | 亚洲精品第一区在线观看 | 欧美日韩免费一区二区三区 | 欧美setu | 久久久亚洲国产天美传媒修理工 | 亚洲日本国产 | 91国内视频在线观看 | 亚洲电影第三页 | 麻豆美女| 国产在线小视频 | 精品国产一区二区三区久久久蜜月 | 久久aⅴ乱码一区二区三区 一区二区精品视频 | 精品一区二区三区成人精品 | 激情综合网五月婷婷 | 看黄在线 | 一级黄色片看看 | 成人影音 | 精品一区二区久久久久久久网站 | 992人人草| 国产精品毛片久久久久久久明星 | 国产精品高清在线 | 亚洲午夜精品视频 | 亚洲网站在线 | 精品免费视频 | 日韩欧美中文字幕在线视频 | 久久久精品日本 | 精品国产乱码久久久久久久 | 久久精品日产第一区二区三区 | 国产成人一区二区三区 | 精品蜜桃一区二区三区 | 日韩不卡一区二区三区 | 九九九久久国产免费 | 国产精品久久久久一区二区三区 | 国产日韩精品一区 |