日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis 数据同步机制分析

發(fā)布時間:2024/9/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 数据同步机制分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Redis的主從同步機制可以確保redis的master和slave之間的數(shù)據(jù)同步。按照同步內(nèi)容的多少可以分為全同步和部分同步;按照同步的時機可以分為slave剛啟動時的初始化同步和正常運行過程中的數(shù)據(jù)修改同步;本文將對這兩種機制的流程進(jìn)行分析。

全備份過程中,在slave啟動時,會向其master發(fā)送一條SYNC消息,master收到slave的這條消息之后,將可能啟動后臺進(jìn)程進(jìn)行備份,備份完成之后就將備份的數(shù)據(jù)發(fā)送給slave,初始時的全同步機制是這樣的:

(1)slave啟動后向master發(fā)送同步指令SYNC,master接收到SYNC指令之后將調(diào)用該命令的處理函數(shù)syncCommand()進(jìn)行同步處理;

(2)在函數(shù)syncCommand中,將調(diào)用函數(shù)rdbSaveBackground啟動一個備份進(jìn)程用于數(shù)據(jù)同步,如果已經(jīng)有一個備份進(jìn)程在運行了,就不會再重新啟動了。

(3)備份進(jìn)程將執(zhí)行函數(shù)rdbSave()完成將redis的全部數(shù)據(jù)保存為rdb文件。

(4)在redis的時間事件函數(shù)serverCron(redis的時間處理函數(shù)是指它會定時被redis進(jìn)行操作的函數(shù))中,將對備份后的數(shù)據(jù)進(jìn)行處理,在serverCron函數(shù)中將會檢查備份進(jìn)程是否已經(jīng)執(zhí)行完畢,如果備份進(jìn)程已經(jīng)完成備份,則調(diào)用函數(shù)backgroundSaveDoneHandler完成后續(xù)處理。

(5)在函數(shù)backgroundSaveDoneHandler中,首先更新master的各種狀態(tài),例如,備份成功還是失敗,備份的時間等等。然后調(diào)用函數(shù)updateSlavesWaitingBgsave,將備份的rdb數(shù)據(jù)發(fā)送給等待的slave。

(6)在函數(shù)updateSlavesWaitingBgsave中,將遍歷所有的等待此次備份的slave,將備份的rdb文件發(fā)送給每一個slave。另外,這里并不是立即就把數(shù)據(jù)發(fā)送過去,而是將為每個等待的slave注冊寫事件,并注冊寫事件的響應(yīng)函數(shù)sendBulkToSlave,即當(dāng)slave對應(yīng)的socket能夠發(fā)送數(shù)據(jù)時就調(diào)用函數(shù)sendBulkToSlave(),實際發(fā)送rdb文件的操作都在函數(shù)sendBulkToSlave中完成。

(7)sendBulkToSlave函數(shù)將把備份的rdb文件發(fā)送給slave。

上述函數(shù)調(diào)用過程如下圖1所示:


圖1 redis全備份時master部分的的函數(shù)調(diào)用過程

二、數(shù)據(jù)修改操作的同步

Redis的正常部署中一般都是一個master用于寫操作,若干個slave用于讀操作,另外定期的數(shù)據(jù)備份操作也是單獨選址一個slave完成,這樣可以最大程度發(fā)揮出redis的性能。在部署完成,各master\slave程序啟動之后,首先進(jìn)行第一階段初始化時的全同步操作,全同步操作完成之后,后續(xù)所有寫操作都是在master上進(jìn)行,所有讀操作都是在slave上進(jìn)行,因此用戶的寫操作需要及時擴散到所有的slave以便保持?jǐn)?shù)據(jù)最大程度上的同步。Redis的master-slave進(jìn)程在正常運行期間更新操作(包括寫、刪除、更改操作)的同步方式如下:

(1)master接收到一條用戶的操作后,將調(diào)用函數(shù)call函數(shù)來執(zhí)行具體的操作函數(shù)(此過程可參考另一文檔《redis命令執(zhí)行流程分析》),在該函數(shù)中首先通過proc執(zhí)行操作函數(shù),然后將判斷操作是否需要擴散到各slave,如果需要則調(diào)用函數(shù)propagate()來完成此操作。

(2)propagate()函數(shù)完成將一個操作記錄到aof文件中或者擴散到其他slave中;在該函數(shù)中通過調(diào)用feedAppendOnlyFile()將操作記錄到aof中,通過調(diào)用replicationFeedSlaves()將操作擴散到各slave中。

(3)函數(shù)feedAppendOnlyFile()中主要保存操作到aof文件,在該函數(shù)中首先將操作轉(zhuǎn)換成redis內(nèi)部的協(xié)議格式,并以字符串的形式存儲,然后將字符串存儲的操作追加到aof文件后。

(4)函數(shù)replicationFeedSlaves()主要將操作擴散到每一個slave中;在該函數(shù)中將遍歷自己下面掛的每一個slave,以此對每個slave進(jìn)行如下兩步的處理:將slave的數(shù)據(jù)庫切換到本操作所對應(yīng)的數(shù)據(jù)庫(如果slave的數(shù)據(jù)庫id與當(dāng)前操作的數(shù)據(jù)id不一致時才進(jìn)行此操作);將命令和參數(shù)按照redis的協(xié)議格式寫入到slave的回復(fù)緩存中。寫入切換數(shù)據(jù)庫的命令時將調(diào)用addReply,寫入命令和參數(shù)時將調(diào)用addReplyMultiBulkLen和addReplyBulk,函數(shù)addReplyMultiBulkLen和addReplyBulk最終也將調(diào)用函數(shù)addReply。

(5)在函數(shù)addReply中將調(diào)用prepareClientToWrite()設(shè)置slave的socket寫入事件處理函數(shù)sendReplyToClient(通過函數(shù)aeCreateFileEvent進(jìn)行設(shè)置),這樣一旦slave對應(yīng)的socket發(fā)送緩存中有空間寫入數(shù)據(jù),即調(diào)用sendReplyToClient進(jìn)行處理。

(6)函數(shù)sendReplyToClient()的主要功能是將slave中要發(fā)送的數(shù)據(jù)通過socket發(fā)出去。


圖2、redis操作過程中數(shù)據(jù)同步的函數(shù)調(diào)用關(guān)系

圖中的序號表示調(diào)用的先后關(guān)系,同級之間的序號才有意義。


來源:http://blog.csdn.net/houjixin/article/details/27680183

總結(jié)

以上是生活随笔為你收集整理的Redis 数据同步机制分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天干夜夜操 | 日本大尺度做爰呻吟舌吻 | 久久久久久久久久久久国产 | www.av日韩 | 欧美啪啪小视频 | 欧美日本在线播放 | 美女扒开腿男人爽桶 | 成人国产精品免费观看动漫 | 午夜久久影院 | 日本一区二区免费高清视频 | 色多多在线视频 | 亚洲春色在线 | 日韩在线视频网站 | 亚洲成人av综合 | 伊人看片 | 日本人六九视频 | 琪琪午夜伦理 | 噜噜吧噜噜色 | 日韩精品在线观看网站 | 毛片无限看 | 中文字幕日日夜夜 | 色屁屁ts人妖系列二区 | 1024金沙人妻一区二区三区 | 熟睡人妻被讨厌的公侵犯 | 精品成在人线av无码免费看 | 东京热一本视频一区 | 亚洲日本欧美在线 | 国产小视频在线看 | 天天爱天天操 | 筱田优全部av免费观看 | 午夜理伦三级做爰电影 | 公侵犯人妻一区二区 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 欧美大片免费 | 一区二区亚洲精品 | 亚洲综合色小说 | 乌克兰少妇性做爰 | 青草成人| 亚洲国产精品尤物yw在线观看 | 91免费高清 | 中文字幕一区二区三区在线观看 | 亚洲一区二区三区无码久久 | 精品欧美在线 | www日本视频 | 偷偷操不一样的99 | 成人免费大全 | 99久久这里只有精品 | 免费毛片看片 | 午夜在线观看av | 免费一级大片 | 成人免费在线观看网站 | 中文字幕一区二区三区四区视频 | 亚洲国产精品久久 | 日韩电影三级 | 男人扒女人添高潮视频 | 国产日韩欧美在线观看 | 女同一区 | 黄色一级视频 | 夜夜爽爽 | 11孩岁女毛片 | 国产成人啪免费观看软件 | 欧美亚洲一区 | 美女被娇喘流出白 | 91av欧美| 青青伊人国产 | 成人福利在线看 | 黄色网址免费 | 精品国产中文字幕 | 第四色视频 | 亚洲va久久久噜噜噜无码久久 | 国产亚洲av片在线观看18女人 | 亚洲v欧美 | 91久久精品视频 | 亚洲成人精品一区二区 | 亚洲综合成人av | 五月婷婷开心中文字幕 | 六月婷婷久久 | 成人极品视频 | 色无极亚洲| 久久9999久久免费精品国产 | 97精品免费视频 | 欧美中文字幕一区二区三区 | 日日噜噜夜夜爽爽 | 国产成人aaa | 亚洲免费不卡视频 | 在线观看国产亚洲 | 免费啪视频| 精品久久久久久久久中文字幕 | 2021av视频| 亚洲国产网址 | 色视频免费看 | 亚洲AV无码成人精品国产一区 | 国产情侣一区二区 | 成年人黄色在线观看 | 激情婷婷色 | 亚洲国产精品视频在线观看 | 亚洲国产综合久久 | 麻豆网页| 亚洲88av|