最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis主從復(fù)制與讀寫分離的實(shí)現(xiàn)

 更新時間:2023年12月20日 09:09:35   作者:吳名氏.  
Redis在作為緩存的時候,隨著項(xiàng)目訪問量的增加,對Redis服務(wù)器的操作也越加頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,本文主要介紹了Redis主從復(fù)制與讀寫分離的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下

1、為什么要主從復(fù)制、讀寫分離

Redis在作為緩存的時候,隨著項(xiàng)目訪問量的增加,對Redis服務(wù)器的操作也越加頻繁,雖然Redis讀寫速度都很快,但是一定程度上也會造成一定的延時,甚至出現(xiàn)宕機(jī)的可能性,這時候就出現(xiàn)了“單點(diǎn)故障”,那么為了解決訪問量大的問題,通常會采取的一種方式是主從架構(gòu)Master/Slave,Master 以寫為主,Slave 以讀為主,并且會伴隨哨兵進(jìn)行監(jiān)控

主從復(fù)制機(jī)制說明:

  • 主redis中的數(shù)據(jù)有兩個副本(replication)即從redis1和從redis2,即使一臺redis服務(wù)器宕機(jī)其他兩臺redis服務(wù)也可以繼續(xù)提供服務(wù)。
  • 主redis中的數(shù)據(jù)和從redis上的數(shù)據(jù)保持實(shí)時同步,當(dāng)主redis寫入數(shù)據(jù)時通過主從復(fù)制機(jī)制會復(fù)制到兩個從redis服務(wù)上。
  • 只有一個主redis,可以有多個從redis。
  • 主從復(fù)制不會阻塞master,在同步數(shù)據(jù)時,master可以繼續(xù)處理client請求。

一個 Redis 可以即是主又是從,如下圖:

2、主從配置實(shí)踐,修改配置文件

[root@localhost ~]# cd /usr/local/redis/bin/
[root@localhost bin]# cp redis.conf redis6379.conf
[root@localhost bin]# cp redis.conf redis6380.conf
[root@localhost bin]# cp redis.conf redis6381.conf

然后對這3個配置文件redis6379.conf、redis6380.conf、redis6381.conf分別進(jìn)行修改(每個配置文件都要修改)

①、修改配置端口,分別改成對應(yīng)的端口即可

注:我用的是FinalShell工具,挺方便的,推薦。

②、修改daemonize為yes

③、配置pid文件路徑 pidfile

④、配置log 文件名字

⑤、配置rdb文件名

⑥、看情況選擇:如果redis配置了密碼(requirepass 123456),則還需在從redis服務(wù)中設(shè)置這一項(xiàng),如果沒有設(shè)置密碼則忽略這一項(xiàng)

問題介紹:如果我們在主redis服務(wù)器上設(shè)置了密碼,即:在redis.conf配置文件中使用了requirepass 123456(你設(shè)置的密碼);那么我們在從redis服務(wù)器上的配置文件redis.conf中使用了slaveof 127.0.0.1 6379后發(fā)現(xiàn):主從復(fù)制失敗。

解決方案:在從redis服務(wù)器上的配置文件redis.conf中找到:masterauth <master-password>這一行,然后在這一行的下面寫上masterauth 123456(主redis服務(wù)器密碼)。這時候我們再分別重啟主redis服務(wù)器和從redis服務(wù)器,則發(fā)現(xiàn)主從復(fù)制成功!

當(dāng)三份都配置完成后,分別啟動這三個服務(wù):

使用ps -ef | grep redis 查看:

然后通過如下命令選擇不同的端口進(jìn)入到這三個Redis客戶端:

redis-cli -p 6379

3、設(shè)置主從關(guān)系

①、設(shè)置一主二從:

通過 INFO replication 命令查看發(fā)現(xiàn),三個默認(rèn)的都是Master角色,

然后我們將 6380 和 6381設(shè)置為Slave角色,可以使用如下命令:

SLAVEOF 127.0.0.1 6379
或
REPLICAOF 127.0.0.1 6379

這時 6380 和 6381成為了Slave,然后查看一下主機(jī)(Master)信息:

可以發(fā)現(xiàn)主機(jī)下面有兩個Slave節(jié)點(diǎn)。

注:通過這種方式來設(shè)置主從關(guān)系,一旦服務(wù)重啟,那么角色關(guān)系將不復(fù)存在。想要保存這種關(guān)系,可以通過Slave的 配置文件來進(jìn)行配置。

分別編輯 redis6380.conf 和 redis6381.conf 配置文件,加入(約在286行):

replicaof 127.0.0.1 6379

4、測試數(shù)據(jù)

①、給主節(jié)點(diǎn)設(shè)置值:set k1 v1

從節(jié)點(diǎn)也可以獲取到值,說明沒問題。

在沒有設(shè)置主從關(guān)系之前,如果主節(jié)點(diǎn)內(nèi)有數(shù)據(jù),那么在設(shè)置主從關(guān)系后,Slave從節(jié)點(diǎn)也能獲取到主節(jié)點(diǎn)原來的數(shù)據(jù)。

如果Master主節(jié)點(diǎn)掛掉了,Slave從節(jié)點(diǎn)的角色不會發(fā)生變化,一直處于等待狀態(tài),直到Master主節(jié)點(diǎn)重新啟動。

如果要將Slave從節(jié)點(diǎn)變成Master節(jié)點(diǎn),可以使用如下命令:

SLAVEOF no one

5、Redis配置文件解析

下面是redis主從復(fù)制場景的一些可調(diào)參數(shù),需要根據(jù)實(shí)際環(huán)境調(diào)整

  • slave-serve-stale-data yes : 是否可以把不新鮮的數(shù)據(jù)服務(wù)與客戶端
  • slave-read-only yes : 從節(jié)點(diǎn)只讀,啟用slaveof定義后才生效
  • repl-diskless-sync no :是否同時向多個從節(jié)點(diǎn)同時發(fā)數(shù)據(jù)
  • repl-diskless-sync-delay 5 :發(fā)送的延遲時間
  • repl-ping-slave-period 10 探測從節(jié)點(diǎn)狀態(tài)
  • repl-timeout 60 探測節(jié)點(diǎn)超時時間
  • repl-disable-tcp-nodelay no : 啟用nodelay
  • repl-backlog-size 1mb
  • slave-priority 100 : 從節(jié)點(diǎn)優(yōu)先級,復(fù)制集群中,主節(jié)點(diǎn)故障時,sentinel應(yīng)用場景中的主節(jié)點(diǎn)選舉時使用的優(yōu)先級;數(shù)字越小優(yōu)先級越高,但0表示不參與選舉;
  • min-slaves-to-write 3:主節(jié)點(diǎn)僅允許其能夠通信的從節(jié)點(diǎn)數(shù)量大于等于此處的值時接受寫操作;
  • min-slaves-max-lag 10:從節(jié)點(diǎn)延遲時長超出此處指定的時長時,主節(jié)點(diǎn)會拒絕寫入操作;

6、主從復(fù)制的優(yōu)點(diǎn)(特點(diǎn))與缺點(diǎn)

6.1、優(yōu)點(diǎn)(特點(diǎn))

主從采用異步復(fù)制數(shù)據(jù)

主數(shù)據(jù)庫可以進(jìn)行讀寫操作,當(dāng)寫操作時會自動將數(shù)據(jù)同步給從數(shù)據(jù)庫

從數(shù)據(jù)庫一般只讀的,并且接收主數(shù)據(jù)庫同步過來的數(shù)據(jù)

一個master可以擁有多個slave,但是一個slave只能對應(yīng)一個master

一個slave也可以連接多個slave

slave意外退出,不影響其他slave的讀和master的讀和寫,重新啟動后會將數(shù)據(jù)從master同步過來

master意外退出,不影響slave的讀,但redis不再提供寫服務(wù),master重啟后redis將重新對外提供寫服務(wù)

master掛了以后,不會在slave節(jié)點(diǎn)中重新選一個master

6.2、缺點(diǎn)

由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機(jī)器有一定的延遲,當(dāng)系統(tǒng)很繁忙的時候,延遲問題會更加嚴(yán)重,Slave機(jī)器數(shù)量的增加也會使這個問題更加嚴(yán)重。

7、Redis主從復(fù)制之原理介紹

Slave啟動成功連接到Master后會發(fā)送一個sync命令,Master接到命令啟動后臺的存盤進(jìn)程,同時收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺進(jìn)程執(zhí)行完畢之后,Master將傳送整個數(shù)據(jù)文件到Slave,以完成一次完全同步

  • 全量同步:而Slave服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)后,將其存盤并加載到內(nèi)存中。
  • 增量同步:Master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步。

但是只要是重新連接Master,一次完全同步(全量同步)將被自動執(zhí)行。

--詳細(xì)介紹:

①、全量同步

Redis 的全量同步過程主要分三個階段:

同步快照階段: Master 創(chuàng)建并發(fā)送快照給 Slave , Slave 載入并解析快照。 Master 同時將此階段所產(chǎn)生的 新的寫命令存儲到緩沖區(qū)。

同步寫緩沖階段: Master 向 Slave 同步存儲在緩沖區(qū)的寫操作命令。

同步增量階段: Master 向 Slave 同步寫操作命令。

②、增量同步

Redis 增量同步主要指 Slave 完成初始化后開始正常工作時, Master 發(fā)生的寫操作同步到 Slave 的過程。

通常情況下, Master 每執(zhí)行一個寫命令就會向 Slave 發(fā)送相同的寫命令,然后 Slave 接收并執(zhí)行。

到此這篇關(guān)于Redis主從復(fù)制與讀寫分離的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis主從復(fù)制與讀寫分離內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis作為分布式鎖的使用詳解

    Redis作為分布式鎖的使用詳解

    這篇文章主要介紹了Redis作為分布式鎖的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 淺談Redis的IO多路復(fù)用

    淺談Redis的IO多路復(fù)用

    本文主要介紹了淺談Redis的IO多路復(fù)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • 利用Redis實(shí)現(xiàn)SQL伸縮的方法

    利用Redis實(shí)現(xiàn)SQL伸縮的方法

    本文主要介紹了如何通過鎖和時間序列等方面來提升傳統(tǒng)數(shù)據(jù)庫的性能等方法,利用Redis實(shí)現(xiàn)SQL伸縮,供有需要的朋友們參考。
    2015-09-09
  • Redis HyperLogLog用戶統(tǒng)計功能實(shí)現(xiàn)代碼

    Redis HyperLogLog用戶統(tǒng)計功能實(shí)現(xiàn)代碼

    本文詳細(xì)解析了UV(獨(dú)立訪客)統(tǒng)計在互聯(lián)網(wǎng)產(chǎn)品運(yùn)營中的的重要性,并對比了傳統(tǒng)UV統(tǒng)計方案與HyperLogLog算法的優(yōu)勢,HyperLogLogLog在內(nèi)存占用、寫入性能與統(tǒng)計精度方面表現(xiàn)出色,感興趣的朋友跟隨小編一起看看吧
    2026-06-06
  • redis中session會話共享的三種方案

    redis中session會話共享的三種方案

    本文探討了分布式系統(tǒng)中Session共享的三種解決方案,包括粘性會話、Session復(fù)制以及基于Redis的集中存儲,具有一定的參考價值,感興趣的可以了解一下
    2025-08-08
  • 詳解redis中的鎖以及使用場景

    詳解redis中的鎖以及使用場景

    這篇文章主要介紹了詳解redis中的鎖以及使用場景,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案

    Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案

    兩級緩存Redis+Caffeine可以解決緩存雪等問題也可以提高接口的性能,但是可能會出現(xiàn)緩存一致性問題,如果數(shù)據(jù)頻繁的變更,可能會導(dǎo)致Redis和Caffeine數(shù)據(jù)不一致的問題,所以本文給大家介紹了Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案,需要的朋友可以參考下
    2024-12-12
  • Redis中BigKey與MoreKey優(yōu)化詳解

    Redis中BigKey與MoreKey優(yōu)化詳解

    這篇文章主要介紹了Redis中BigKey與MoreKey優(yōu)化,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • redis內(nèi)部數(shù)據(jù)結(jié)構(gòu)之SDS簡單動態(tài)字符串詳解

    redis內(nèi)部數(shù)據(jù)結(jié)構(gòu)之SDS簡單動態(tài)字符串詳解

    SDS是Redis中實(shí)現(xiàn)的一種數(shù)據(jù)結(jié)構(gòu),用來存儲字符串,最近學(xué)習(xí)中正好學(xué)習(xí)到了這里,所以下面這篇文章主要給大家介紹了redis內(nèi)部數(shù)據(jù)結(jié)構(gòu)之SDS簡單動態(tài)字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • 解析高可用Redis服務(wù)架構(gòu)分析與搭建方案

    解析高可用Redis服務(wù)架構(gòu)分析與搭建方案

    我們按照由簡至繁的步驟,搭建一個最小型的高可用的Redis服務(wù)。 本文通過四種方案給大家介紹包含每種方案的優(yōu)缺點(diǎn)及詳細(xì)解說,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-06-06

最新評論

怀安县| 金坛市| 湖口县| 象山县| 广宁县| 杭州市| 隆林| 茶陵县| 隆子县| 崇明县| 呈贡县| 安化县| 双流县| 铁岭县| 民丰县| 金昌市| 西充县| 德兴市| 长治县| 河源市| 外汇| 咸阳市| 沙河市| 张掖市| 南平市| 炎陵县| 民权县| 潍坊市| 清流县| 塔城市| 天台县| 石狮市| 大同市| 星座| 麻栗坡县| 石棉县| 云阳县| 临颍县| 鄄城县| 秭归县| 宿松县|