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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

数据库

redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...

發(fā)布時(shí)間:2025/4/5 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上周因?yàn)閷?shí)在太忙就認(rèn)認(rèn)真真寫了一篇水文,吹了一下自己過(guò)去的經(jīng)歷,反響竟然超出了我的預(yù)期,并且后臺(tái)還有讀者留言表示想看續(xù)集的。哈哈,果然大家還是對(duì)水文更有熱情。

這期我們繼續(xù)回到之前的 Redis 話題。今天主要講的是主從復(fù)制數(shù)據(jù)一致性相關(guān)以及面對(duì)網(wǎng)絡(luò)中斷如何進(jìn)行數(shù)據(jù)同步的問(wèn)題。

不 BB 了,直接上鐘吧!

圖注:思維導(dǎo)圖

主從模式配置

對(duì)于 Redis 主從大家可能并不陌生,但是配置的話日常工作中并不會(huì)經(jīng)常操作。在這里簡(jiǎn)單介紹下主從的相關(guān)配置。

1、主從模式

Redis 中設(shè)置主從的方式很簡(jiǎn)單,通常有兩種:

  • 通過(guò)在配置文件 redis.conf 中設(shè)置 slaveof 方式(永久);
  • 直接在客戶端執(zhí)行 slaveof ip port 的方式(臨時(shí));

2、主-從-從模式

對(duì)于主-從-從的模式來(lái)說(shuō),配置也與上邊的操作類似,在這里就不多贅述了。

主從一致性原理

了解了主從配置后,下面就要進(jìn)入正題了。

在主從中,通常的操作是主庫(kù)用來(lái)寫入數(shù)據(jù),從庫(kù)用來(lái)讀取數(shù)據(jù)。這樣的好處是避免了所有的請(qǐng)求壓力都打在了主庫(kù)上,同時(shí)系統(tǒng)的伸縮性也得到了很大的提升。

但是問(wèn)題就來(lái)了,讀從庫(kù)時(shí)的數(shù)據(jù)要與主庫(kù)保持一致,那就需要主庫(kù)的數(shù)據(jù)在寫入后同步到從庫(kù)中。如何保持主庫(kù)與從庫(kù)的數(shù)據(jù)一致性,當(dāng)有多個(gè)從庫(kù)時(shí),又如何做到呢?

1、全量復(fù)制

這是第一次同步時(shí)所發(fā)生的傳遞關(guān)系。看名字就知道,主庫(kù)第一次就毫無(wú)保留的把所有數(shù)據(jù)都傳遞給了從庫(kù)。

我們先來(lái)看下它們是如何發(fā)生第一次關(guān)系的(就知道你會(huì)想歪)。

圖中的同步流程已經(jīng)很清晰了,總共分為三部分:

(1)主從節(jié)點(diǎn)建立聯(lián)系

當(dāng)從節(jié)點(diǎn)與主節(jié)點(diǎn)第一次建立聯(lián)系時(shí),從節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)發(fā)送 psync 命令,表示要進(jìn)行數(shù)據(jù)同步。

正如你看到的 psync 命令后會(huì)帶有兩個(gè)參數(shù):一個(gè)是 runID,一個(gè)是偏移量 offset。

  • runID:每個(gè)Redis實(shí)例生成的隨機(jī)且唯一的ID,在這里表示的是主節(jié)點(diǎn)的ID。
  • offset:復(fù)制偏移量。

在圖中第一次復(fù)制時(shí)因?yàn)椴恢乐鲙?kù)ID和偏移量,因此用“?”和“-1”分別來(lái)表示runID 和 offset。

當(dāng)主節(jié)點(diǎn)接收到 psync 命令后,會(huì)使用 FULLSYNC命令向從節(jié)點(diǎn)發(fā)送 runID 及offset 兩個(gè)參數(shù)。從節(jié)點(diǎn)將其信息保存下來(lái)。

到這里關(guān)系算是建立了下來(lái)。

(2)主節(jié)點(diǎn)同步RDB文件

RDB文件,這是一個(gè)老面孔了,持久化時(shí)會(huì)用到的二進(jìn)制文件。在這里起著主從數(shù)據(jù)同步的作用,也就是說(shuō)主從同步是依賴 RDB 文件來(lái)實(shí)現(xiàn)的。

從節(jié)點(diǎn)接收到 RDB 文件后,在本地完成數(shù)據(jù)加載,算是完成了主從同步。

到這里你有沒(méi)有發(fā)現(xiàn)什么問(wèn)題?

我們回想下 RDB 文件是如何生成的。在持久化那篇文章里,我們介紹過(guò),父進(jìn)程 fork 了一個(gè)子進(jìn)程來(lái)進(jìn)行生成 RDB 文件。父進(jìn)程并不阻塞接收處理客戶端的命令。

那么問(wèn)題就產(chǎn)生了,當(dāng)主節(jié)點(diǎn)把 RDB 文件發(fā)送給從節(jié)點(diǎn)時(shí),主節(jié)點(diǎn)同時(shí)接收的命令又該如何來(lái)處理?

(3)主節(jié)點(diǎn)同步緩沖區(qū)命令

這一步就是來(lái)解決 RDB 文件生成后,父進(jìn)程又接收到寫命令同步的問(wèn)題的。

為了保證主從節(jié)點(diǎn)數(shù)據(jù)的一致性,主節(jié)點(diǎn)中會(huì)使用緩沖區(qū)來(lái)記錄 RDB 文件生成后接收到的寫操作命令。在 RDB 文件發(fā)送完成后會(huì)把緩沖區(qū)的命令發(fā)送給從節(jié)點(diǎn)來(lái)執(zhí)行。

到這里,主從節(jié)點(diǎn)的數(shù)據(jù)同步算是完成了。

2、級(jí)聯(lián)操作

我們?cè)賮?lái)回顧下整個(gè)同步流程,從建立關(guān)系,生成 RDB 文件,傳輸給從節(jié)點(diǎn)到最后緩沖區(qū)命令發(fā)送給從節(jié)點(diǎn)。這是一個(gè)從節(jié)點(diǎn)與主節(jié)點(diǎn)同步的完整流程。

那么我們?cè)賮?lái)思考:當(dāng)有多個(gè)從節(jié)點(diǎn),也就是一主多從時(shí),第一次連接時(shí)都要進(jìn)行全量復(fù)制。但是在生成 RDB 文件時(shí),父進(jìn)程 fork 子進(jìn)程時(shí)可能會(huì)出現(xiàn)阻塞,同時(shí)在傳輸 RDB 文件時(shí)也會(huì)占用帶寬,浪費(fèi)資源。

這種情況我們?cè)撊绾蝸?lái)解決呢?

不知道你對(duì)文章開(kāi)頭的 主-從-從模式是否還有印象。通過(guò)對(duì)從節(jié)點(diǎn)再建立從節(jié)點(diǎn)。同步數(shù)據(jù)時(shí)從級(jí)聯(lián)的從節(jié)點(diǎn)上進(jìn)行同步,從而就減輕了主節(jié)點(diǎn)的壓力。

網(wǎng)絡(luò)開(kāi)小差了

上面的流程我們已經(jīng)知道了正常情況下主從節(jié)點(diǎn)的復(fù)制過(guò)程了,但是當(dāng)網(wǎng)絡(luò)中斷導(dǎo)致主從連接失敗等異常情況下,主從同步又是如何來(lái)進(jìn)行的?

在這里要提到一個(gè)增量復(fù)制的名詞,與全量復(fù)制不同的是,它是根據(jù)主從節(jié)點(diǎn)的偏移量來(lái)進(jìn)行數(shù)據(jù)同步的。

什么意思呢?

還記得在全量復(fù)制里我們所提到過(guò)的緩沖區(qū)嗎?就是用來(lái)存儲(chǔ)生成 RDB 文件后的寫命令的,這里我們稱為緩沖區(qū)A。主從節(jié)點(diǎn)斷開(kāi)連接后,除了會(huì)將后續(xù)接收到的寫命令寫入緩沖區(qū)A的同時(shí),還會(huì)寫入到另一個(gè)緩沖區(qū)B里。

在緩沖區(qū)B里,主從節(jié)點(diǎn)分別會(huì)維護(hù)一個(gè)偏移量 offset。剛開(kāi)始時(shí),主節(jié)點(diǎn)的寫位置與從節(jié)點(diǎn)的讀位置在同一起點(diǎn),隨著主節(jié)點(diǎn)的不斷寫入,偏移量也會(huì)逐漸增大。同樣地,從節(jié)點(diǎn)復(fù)制完后偏移量也在不斷增加。

當(dāng)網(wǎng)絡(luò)斷開(kāi)連接時(shí),從節(jié)點(diǎn)不再進(jìn)行同步,此時(shí)主節(jié)點(diǎn)由于不斷接收新的寫操作的偏移量會(huì)大于從節(jié)點(diǎn)的偏移量。當(dāng)連接恢復(fù)時(shí),從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送帶有偏移量的psync 命令,主節(jié)點(diǎn)根據(jù)偏移量來(lái)進(jìn)行比較,只需將未同步寫命令同步給從節(jié)點(diǎn)即可。

總結(jié)

主從一致性原理

  • 從節(jié)點(diǎn)第一次進(jìn)行連接時(shí),主節(jié)點(diǎn)會(huì)生成 RDB 文件進(jìn)行全量復(fù)制,同時(shí)將新寫入的命令存儲(chǔ)進(jìn)緩沖區(qū),發(fā)送給從節(jié)點(diǎn),從而保證數(shù)據(jù)一致性;
  • 為了減少數(shù)據(jù)同步給主節(jié)點(diǎn)帶來(lái)的壓力,可以通過(guò)從節(jié)點(diǎn)級(jí)聯(lián)的方式進(jìn)行同步。

網(wǎng)絡(luò)開(kāi)小差了

  • 網(wǎng)絡(luò)斷連重新連接后,主從節(jié)點(diǎn)通過(guò)分別維護(hù)的偏移量來(lái)同步寫命令。

原文鏈接:面試官:Redis 主從復(fù)制時(shí)網(wǎng)絡(luò)開(kāi)小差了怎么整?

總結(jié)

以上是生活随笔為你收集整理的redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 激情久久网 | 国产精品福利一区二区三区 | 日日操影院 | 蜜桃精品久久久久久久免费影院 | 天天色棕合合合合合合合 | 奇米狠狠777 | 国产高清免费在线观看 | 99爱免费视频 | 久久精品国产精品亚洲 | 亚洲xx网 | 久久亚洲成人 | 亚洲欧美色视频 | av在线免费播放网站 | 黑人巨大国产9丨视频 | 国产精品123区 | 欧美成人午夜视频 | 亚洲少妇中文字幕 | 一级免费看 | 日本五十路| 成人在线免费高清视频 | 亚洲石原莉奈一区二区在线观看 | 国产视频精选 | 久久综合成人网 | 97成人在线视频 | 国产成人综合久久 | 国产精品15p| xxxxxx国产 | 伊人91在线 | 九九久久久| 一区二区三区四区欧美 | 国产精品系列在线播放 | 亚洲va韩国va欧美va | 欧美日韩一区二区三区电影 | 国精品一区二区 | 欧美专区日韩专区 | 日本色中色 | 成年人毛片视频 | 99re久久 | 色婷婷视频在线 | 国产a视频 | 99精品久久久久久 | 色婷婷在线影院 | av亚洲在线观看 | 青青草视频播放器 | 91精品国产色综合久久不卡98口 | 一区二区三区四区在线播放 | 伊人9| 成人做爰69片免费看 | 欧美在线视频你懂的 | 欧美极品jizzhd欧美爆 | 丝袜美腿av | 在线观看麻豆视频 | 欧洲熟妇精品视频 | 中文无码精品一区二区三区 | 亚洲欧洲成人 | 女生扒开尿口让男生桶 | 精品人妻一区二区色欲产成人 | 99re最新网址 | 日韩视频 中文字幕 | 91福利在线观看视频 | 国产精品1区 | 亚洲午夜免费 | 嫩草午夜少妇在线影视 | 精品成在人线av无码免费看 | 日韩成人欧美 | 人妻丰满熟妇av无码区不卡 | 日本一区不卡在线观看 | 一级黄色片免费在线观看 | 婷婷丁香综合 | 久久久久久91亚洲精品中文字幕 | 久久人人添人人爽添人人片 | 欧美熟女一区二区 | 亚洲美女爱爱 | 在线不卡日本 | 91爱在线观看 | 波多野结衣绝顶大高潮 | 女同中文字幕 | 少妇人妻无码专区视频 | 69视频一区二区三区 | www.一区二区三区四区 | 色老头在线一区二区三区 | 午夜不卡av免费 | 久久av影视| 国产精品tv | 天天欧美 | 朝桐光一区二区三区 | 男人天堂亚洲天堂 | 欧美日韩综合网 | 国产亚洲制服欧洲高清一区 | 欧美日韩一区三区 | 天天干天天天天 | 午夜av片| 内射一区二区 | 男女拍拍拍网站 | 午夜免费毛片 | 成人免费毛片网站 | 日韩免费网址 | 手机av免费在线观看 | 日韩大片免费 |