亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis主從配置和底層實(shí)現(xiàn)原理解析(實(shí)戰(zhàn)記錄)

 更新時(shí)間:2021年06月29日 15:18:45   作者:沮喪的南瓜  
今天給大家分享Redis主從配置和底層實(shí)現(xiàn)原理解析,本文通過實(shí)戰(zhàn)項(xiàng)目給大家源碼解析,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

我們使用Redis的時(shí)候往往都是主從模式或者集群架構(gòu),不會(huì)使用單臺(tái)Redis服務(wù)。

一、Redis主從配置實(shí)戰(zhàn)

我們使用master節(jié)點(diǎn)寫輸入,然后將數(shù)據(jù)同步到slave節(jié)點(diǎn),從節(jié)點(diǎn)可以提供讀取或者備份的功能,分擔(dān)master節(jié)點(diǎn)壓力。

在這里插入圖片描述

redis主從架構(gòu)搭建,配置從節(jié)點(diǎn)步驟

1、 復(fù)制一份redis.conf文件為redis-6380.conf

cp ./redis.conf ./conf/redis-6380.conf

2、打開redis-6380.conf配置文件,將相關(guān)配置修改為如下值:

port 6380
pidfile /var/run/redis_6380.pid # 把pid進(jìn)程號(hào)寫入pidfile配置的文件
logfile "6380.log"
dir /usr/local/redis‐5.0.3/data/6380 # 指定數(shù)據(jù)存放目錄
# 需要注釋掉bind
# bind 127.0.0.1(bind綁定的是自己機(jī)器網(wǎng)卡的ip,如果有多塊網(wǎng)卡可以配多個(gè)ip,代表允許客戶端通過機(jī)器的哪些網(wǎng)卡ip去訪問,內(nèi)網(wǎng)一般可以不配置bind,注釋掉即可)

3、在redis-6380.conf中配置主從復(fù)制

replicaof 192.168.0.60 6379 # 從本機(jī)6379的redis實(shí)例復(fù)制數(shù)據(jù),Redis 5.0之前使用slaveof. 這里的IP是redis服務(wù)IP
replica‐read‐only yes # 配置從節(jié)點(diǎn)只讀

注意: 如果的時(shí)候發(fā)現(xiàn)從節(jié)點(diǎn)中始終是空,即沒有同步到主節(jié)點(diǎn)的數(shù)據(jù),可能是192.168.0.60的設(shè)置問題,如果是主從都在一臺(tái)服務(wù)器上,可以試試改成127.0.0.1.
4、啟動(dòng)從節(jié)點(diǎn)

注意一下命令,我這里是相對(duì)路徑。

 ./src/redis-server ./conf/redis-6380.conf 

然后我們查看redis服務(wù)實(shí)例,發(fā)現(xiàn)6379和6380都已經(jīng)啟動(dòng)了。

在這里插入圖片描述

5、連接從節(jié)點(diǎn)

[root@localhost redis-6.2.3]# ./src/redis-cli -p 6380
127.0.0.1:6380>

查看是否同步了數(shù)據(jù):

127.0.0.1:6380> keys *
1) "test3"
2) "tul2"
3) "tul"
4) "tul3"
5) "test1"
6) "yaolao"
7) "test2"
127.0.0.1:6380> 

注意: 如果的時(shí)候發(fā)現(xiàn)從節(jié)點(diǎn)中始終是空,即沒有同步到主節(jié)點(diǎn)的數(shù)據(jù),可能是192.168.0.60的設(shè)置問題,如果是主從都在一臺(tái)服務(wù)器上,可以試試改成127.0.0.1試試。、

6、測(cè)試在6379實(shí)例上寫數(shù)據(jù),6380實(shí)例是否能及時(shí)同步新修改數(shù)據(jù)

7、可以自己再配置一個(gè)6381的從節(jié)點(diǎn)

至此。,我們的主從配置就完成了。我們可以自己去配置多個(gè)從節(jié)點(diǎn)。

二、主從實(shí)現(xiàn)原理

如果你為master配置了一個(gè)slave,不管這個(gè)slave是否是第一次連接上Master,它都會(huì)發(fā)送一個(gè)PSYNC命令給master請(qǐng)求復(fù)制數(shù)據(jù)。

master收到PSYNC命令后,會(huì)在后臺(tái)進(jìn)行數(shù)據(jù)持久化通過bgsave生成最新的rdb快照文件,持久化期間,master會(huì)繼續(xù)接收客戶端的請(qǐng)求,它會(huì)把這些可能修改數(shù)據(jù)集的請(qǐng)求緩存在內(nèi)存中。當(dāng)持久化進(jìn)行完畢以后,master會(huì)把這份rdb文件數(shù)據(jù)集發(fā)送給slave,slave會(huì)把接收到的數(shù)據(jù)進(jìn)行持久化生成rdb,然后再加載到內(nèi)存中。然后,master再將之前緩存在內(nèi)存中的命令發(fā)送給slave。

當(dāng)master與slave之間的連接由于某些原因而斷開時(shí),slave能夠自動(dòng)重連Master,如果master收到了多
個(gè)slave并發(fā)連接請(qǐng)求,它只會(huì)進(jìn)行一次持久化,而不是一個(gè)連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送
給多個(gè)并發(fā)連接的slave。

主從復(fù)制(全量復(fù)制)流程圖

在這里插入圖片描述

psync命令是redis底層的C語言實(shí)現(xiàn)的。

數(shù)據(jù)部分復(fù)制

當(dāng)master和slave斷開重連后,一般都會(huì)對(duì)整份數(shù)據(jù)進(jìn)行復(fù)制。但從redis2.8版本開始,redis改用可以支持部分?jǐn)?shù)據(jù)復(fù)制的命令PSYNC去master同步數(shù)據(jù),slave與master能夠在網(wǎng)絡(luò)連接斷開重連后只進(jìn)行部分?jǐn)?shù)據(jù)復(fù)制(斷點(diǎn)續(xù)傳)。

master會(huì)在其內(nèi)存中創(chuàng)建一個(gè)復(fù)制數(shù)據(jù)用的緩存隊(duì)列,緩存最近一段時(shí)間的數(shù)據(jù),master和它所有的slave都維護(hù)了復(fù)制的數(shù)據(jù)下標(biāo)offset和master的進(jìn)程id,因此,當(dāng)網(wǎng)絡(luò)連接斷開后,slave會(huì)請(qǐng)求master繼續(xù)進(jìn)行未完成的復(fù)制,從所記錄的數(shù)據(jù)下標(biāo)開始。如果master進(jìn)程id變化了,或者從節(jié)點(diǎn)數(shù)據(jù)下標(biāo)offset太舊,已經(jīng)不在master的緩存隊(duì)列里了,那么將會(huì)進(jìn)行一次全量數(shù)據(jù)的復(fù)制。

主從復(fù)制(部分復(fù)制,斷點(diǎn)續(xù)傳)流程圖:

如果slave節(jié)點(diǎn)掛了之后,只想同步新增的數(shù)據(jù)(不需要同步全部)。

最新的命令redis會(huì)寫到repl backlog buffer(默認(rèn)大小是1MB)這個(gè)緩沖區(qū)中。

在這里插入圖片描述

offset是偏移量,即上次復(fù)制產(chǎn)生的偏移量,再一次復(fù)制新的數(shù)據(jù)的時(shí)候只需要從這個(gè)偏移量后面開始復(fù)制即可。注意,這種只適合幾分鐘之內(nèi)的。

如果從緩沖區(qū)沒有找到傳過來的這個(gè)偏移量,說明從節(jié)點(diǎn)可能掛了非常久的時(shí)間,這時(shí)候需要做全量復(fù)制,而不是斷點(diǎn)續(xù)傳了。

緩解主從復(fù)制風(fēng)暴

如果有很多從節(jié)點(diǎn),為了緩解主從復(fù)制風(fēng)暴(多個(gè)從節(jié)點(diǎn)同時(shí)復(fù)制主節(jié)點(diǎn)導(dǎo)致主節(jié)點(diǎn)壓力過大),可以做如下架構(gòu),讓部分從節(jié)點(diǎn)與從節(jié)點(diǎn)(與主節(jié)點(diǎn)同步)同步數(shù)據(jù),即配置主從的ip地址可以寫某個(gè)從節(jié)點(diǎn)的,而不是都寫mast節(jié)點(diǎn)的IP.

在這里插入圖片描述

到此這篇關(guān)于Redis主從配置和底層實(shí)現(xiàn)原理解析(實(shí)戰(zhàn)記錄)的文章就介紹到這了,更多相關(guān)Redis主從配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis設(shè)置Hash數(shù)據(jù)類型的過期時(shí)間

    Redis設(shè)置Hash數(shù)據(jù)類型的過期時(shí)間

    在Redis中,我們可以使用Hash數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)一組鍵值對(duì),而有時(shí)候,我們可能需要設(shè)置這些鍵值對(duì)的過期時(shí)間,本文主要介紹了Redis設(shè)置Hash數(shù)據(jù)類型的過期時(shí)間,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    本文主要講解基于?Redis?的方式實(shí)現(xiàn)異步隊(duì)列,基于?Redis?的?list?實(shí)現(xiàn)隊(duì)列的方式也有多種,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Redis Cluster Pipeline導(dǎo)致的死鎖問題解決

    Redis Cluster Pipeline導(dǎo)致的死鎖問題解決

    本文主要介紹了Redis Cluster Pipeline導(dǎo)致的死鎖問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • Spark刪除redis千萬級(jí)別set集合數(shù)據(jù)實(shí)現(xiàn)分析

    Spark刪除redis千萬級(jí)別set集合數(shù)據(jù)實(shí)現(xiàn)分析

    這篇文章主要為大家介紹了Spark刪除redis千萬級(jí)別set集合數(shù)據(jù)實(shí)現(xiàn)過程分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Redis搜索日期范圍內(nèi)的查詢示例

    Redis搜索日期范圍內(nèi)的查詢示例

    Redis作為內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),雖未專為日期范圍查詢?cè)O(shè)計(jì),但可通過存儲(chǔ)日期數(shù)據(jù)、使用KEYS命令或有序集合(SortedSet)實(shí)現(xiàn)查詢功能,下面就來介紹一下
    2024-09-09
  • 基于Redis?zSet實(shí)現(xiàn)滑動(dòng)窗口對(duì)短信進(jìn)行防刷限流的問題

    基于Redis?zSet實(shí)現(xiàn)滑動(dòng)窗口對(duì)短信進(jìn)行防刷限流的問題

    這篇文章主要介紹了基于Redis?zSet實(shí)現(xiàn)滑動(dòng)窗口對(duì)短信進(jìn)行防刷限流,主要針對(duì)目前線上短信被腳本惡意盜刷的情況,用Redis實(shí)現(xiàn)滑動(dòng)窗口限流,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-02-02
  • Redis客戶端連接遠(yuǎn)程Redis服務(wù)器方式

    Redis客戶端連接遠(yuǎn)程Redis服務(wù)器方式

    這篇文章主要介紹了Redis客戶端連接遠(yuǎn)程Redis服務(wù)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • redis 過期策略及內(nèi)存回收機(jī)制解析

    redis 過期策略及內(nèi)存回收機(jī)制解析

    這篇文章主要介紹了redis 過期策略及內(nèi)存回收機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Redis為什么選擇單線程?Redis為什么這么快?

    Redis為什么選擇單線程?Redis為什么這么快?

    這篇文章主要介紹了Redis為什么選擇單線程?Redis為什么這么快?的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 在不重啟的情況下熱更新Redis集群密碼的流程步驟

    在不重啟的情況下熱更新Redis集群密碼的流程步驟

    當(dāng)我們需要在運(yùn)行中的 Redis 集群中修改密碼時(shí),可以通過 Redis 的配置命令 CONFIG SET 實(shí)現(xiàn)即時(shí)修改,并使用 CONFIG REWRITE 將更改持久化到配置文件中,在本文中,我們將詳細(xì)介紹如何安全地更新你的 Redis 集群密碼,需要的朋友可以參考下
    2024-05-05

最新評(píng)論