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

Redis的主從同步解析

 更新時(shí)間:2017年10月25日 09:00:55   作者:FlyingAngelet  
這篇文章主要介紹了Redis的主從同步解析,見識(shí)淺薄,僅供參考。

一、Redis主從同步原理

1.1 Redis主從同步的過程

配置好slave服務(wù)器連接的master后,slave會(huì)建立和master的連接,然后發(fā)送sync命令。無論是第一次同步建立的連接還是連接斷開后的重新連接,master都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程,將數(shù)據(jù)庫(kù)快照保存到文件中.同時(shí)master主進(jìn)程會(huì)開始收集新的寫命令并緩存起來。當(dāng)后臺(tái)進(jìn)程完成寫文件后,master就將快照文件發(fā)送給slave,slave將文件保存到磁盤上,然后加載到內(nèi)存將數(shù)據(jù)庫(kù)快照恢復(fù)到slave上。slave完成快照文件的恢復(fù)后,master就會(huì)把緩存的命令都轉(zhuǎn)發(fā)給slave,slave更新內(nèi)存數(shù)據(jù)庫(kù)。后續(xù)master收到的寫命令都會(huì)通過開始建立的連接發(fā)送給slave。從master到slave的同步數(shù)據(jù)的命令和從 client到master發(fā)送的命令使用相同的協(xié)議格式。當(dāng)master和slave的連接斷開時(shí),slave可以自動(dòng)重新建立連接。如果master同時(shí)收到多個(gè)slave發(fā)來的同步連接命令,只會(huì)使用啟動(dòng)一個(gè)進(jìn)程來寫數(shù)據(jù)庫(kù)鏡像,然后發(fā)送給所有slave。

1.2 Redis主從同步的特點(diǎn)

主從同步具有明顯的分布式緩存特點(diǎn),主要包括這些方面:

1)一個(gè)master可以有多個(gè)slave,一個(gè)slave也可以有多個(gè)slave;
2)slave不僅可以連接到master,slave也可以連接其他slave形成樹狀結(jié)構(gòu);
3)主從同步不會(huì)阻塞master,但是會(huì)阻塞slave。也就是說當(dāng)一個(gè)或多個(gè)slave與master進(jìn)行初次同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client發(fā)來的請(qǐng)求。相反slave在初次同步數(shù)據(jù)時(shí)則會(huì)阻塞不能處理client的請(qǐng)求;
4)主從同步可以用來提高系統(tǒng)的可伸縮性,我們可以用多個(gè)slave專門處理client的讀請(qǐng)求,也可以用來做簡(jiǎn)單的數(shù)據(jù)冗余或者只在slave上進(jìn)行持久化從而提升集群的整體性能。

1.3 Redis主動(dòng)同步設(shè)置方法

有兩種方式可以用來完成進(jìn)行主從Redis服務(wù)器的同步設(shè)置。都需要針對(duì)slave服務(wù)器上進(jìn)行,指定slave需要連接的Redis服務(wù)器(可能是master,也可能是slave)。

1.3.1 在配置文件中設(shè)置

在作為slave的Redis服務(wù)器的配置文件(redis.conf)中設(shè)置。

Conf代碼

slaveof 10.1.1.102 6379 #指定master的ip和端口

很明顯,這種設(shè)置方式非常簡(jiǎn)單,但是需要修改配置文件,并且配置文件是在服務(wù)器啟動(dòng)時(shí)加載的。所以服務(wù)器不啟動(dòng)無法修改,操作不靈活。

這種配置方式適合于作為部署時(shí)的初始配置。

1.3.2 在Redis客戶端中進(jìn)行設(shè)置

這里以Redis官方推薦的Jedis為例來說明,后文中的測(cè)試也基于Jedis來進(jìn)行。這里jedis對(duì)象實(shí)例是屬于slave的,參數(shù)是服務(wù)器的地址和端口。

Java代碼

slaveJdedis.slaveOf("10.1.1.102", 6379); #指定master的ip和端口 
slaveJdedis.slaveofNoOne(); #取消指定master,自己成為一個(gè)master了

通過客戶端指定的方式,可以方便的修改master和slave服務(wù)器的主從關(guān)系。所以這種方式非常適合于根據(jù)需要在線調(diào)整master和slave服務(wù)器。

1.3.3 當(dāng)前主從同步存在的問題

由于master和slave服務(wù)器的不是Redis自動(dòng)選舉產(chǎn)生,需要人工參與,因此主從倒換無法自動(dòng)完成。這樣就存在一個(gè)問題,什么時(shí)候以及由誰來觸發(fā)倒換。我看了下客戶端是沒有這個(gè)能力的,一定要的話需要自己增加。

Jedis目前隨機(jī)選擇讀取的哪臺(tái)Redis服務(wù)器,因此實(shí)現(xiàn)自動(dòng)分布式讀取我們需要對(duì)Jedis做二次封裝。

1)  需要開發(fā)一種機(jī)制,盡快檢測(cè)到master和slave的工作狀態(tài);
2)  需要定義一種master和slave的自動(dòng)切換策略;
3)  需要定義一種可以隨機(jī)讀取任何一臺(tái)Redis服務(wù)器的機(jī)制;

這些功能都可以在客戶端實(shí)現(xiàn),不過效果不會(huì)太好。如果服務(wù)器自身能夠支持就比較完美了,不過從Redis官網(wǎng)的介紹情況來看,好像目前還沒有看到有人提這樣的需求,也沒有這樣的規(guī)劃。

二、Redis主流客戶端介紹

在Redis的官方網(wǎng)站,列出了5款Redis的java客戶端軟件。其中Jedis是Redis官方推薦的java客戶端,這款一直有維護(hù)并更新。目前服務(wù)器最新穩(wěn)定版本是Redis2.4.17,最新的測(cè)試版本Redis 2.6.0 RC7。

2.1 Jedis

Jedis是Redis官方推薦的Java客戶端版本。目前最新為Jedis 2.1.0-5版本,完全兼容Redis 2.0.0版本。這個(gè)客戶端一直都有維護(hù)和更新。

2.2 JRedis

JRedis之前很長(zhǎng)一段時(shí)間沒有更新,可以完全兼容Redis 2.0.0版本。今天5月份前做過更新后可以兼容最新的Redis2.6.0測(cè)試版本。

2.3 JDBC-Redis

JDBC-Redis是用于Redis這個(gè)NoSQL數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)。只能下載到2009年3月發(fā)布的jdbc-redis_0.1_beta版本,目前已經(jīng)無人維護(hù)了。

2.4 RJC

RJC提供Apache DBCP風(fēng)格的連接池。1年前已經(jīng)停止更新,可以完全兼容Redis 2.0.0版本。

2.5 redis-protocol

這個(gè)更新是最快和最頻繁的,可以兼容最新的Redis 2.6.0版本。不過它定位于完整支持Redis協(xié)議,更加高效和Redis服務(wù)器進(jìn)行數(shù)據(jù)交互。所以,并沒有充分發(fā)揮redis服務(wù)器的功能。

2.6 各個(gè)Java客戶端總體評(píng)價(jià)

整體來講,各個(gè)客戶端基本都實(shí)現(xiàn)了Redis協(xié)議協(xié)議定義的基本功能。Redis-protocol更新最近對(duì)Redis協(xié)議的支持最完整;Jedis提供對(duì)Redis服務(wù)器的更多配置操作,使用起來是最方便的。其他客戶端都很少維護(hù),功能也是一般。

如果要少量擴(kuò)展客戶端的功能,基于Jedis來做開發(fā)是最快捷的。

如果要最大限制兼容和擴(kuò)展客戶端的功能,基于Redis-protocol是最好的選擇。

三、Redis主從同步的使用建議

Redis主從同步在目前所有的Java客戶端都支持不好。主要原因應(yīng)該還是Redis服務(wù)器本身的實(shí)現(xiàn)機(jī)制限制導(dǎo)致的。如果一定要做也是可能的,不過效果可能會(huì)打折扣。

3.1 通過封裝Jdedis來實(shí)現(xiàn)

1)新增一個(gè)管理類,負(fù)責(zé)維護(hù)Redis服務(wù)器集群的服務(wù)器拓?fù)潢P(guān)系;
2)新增一個(gè)監(jiān)測(cè)類,負(fù)責(zé)監(jiān)測(cè)和維護(hù)Redis服務(wù)器集群中的服務(wù)器運(yùn)行狀態(tài);
3)新增一個(gè)Master選擇策略類,負(fù)責(zé)確定master和slave的切換時(shí)機(jī),并選擇最合適的Redis服務(wù)器充當(dāng)master。
4)新增一個(gè)代理類,接管當(dāng)前的Jedis客戶端對(duì)Redis服務(wù)器的讀寫操作。應(yīng)用層通過代理類來使用Jedis客戶端。代理類需要保證Redis服務(wù)器集群對(duì)應(yīng)用層透明。

總結(jié)

以上就是本文關(guān)于Redis的主從同步解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java編程redisson實(shí)現(xiàn)分布式鎖代碼示例、redis中事務(wù)機(jī)制及樂觀鎖的實(shí)現(xiàn)等,有什么問題可以隨時(shí)留言,小編一定知無不言言無不盡。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • 啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    最近使用Redis遇到啟動(dòng)閃退的問題,查閱資料后在一位大神的文章中找到了答案,這篇文章主要給大家介紹了關(guān)于啟動(dòng)redis出現(xiàn)閃退情況的解決辦法,需要的朋友可以參考下
    2023-11-11
  • redis中刪除操作命令

    redis中刪除操作命令

    這篇文章主要介紹了redis中刪除操作命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Redis兩種持久化方案RDB和AOF詳解

    Redis兩種持久化方案RDB和AOF詳解

    這篇文章主要介紹了Redis 兩種持久化方案,RDB(Redis DataBase)和 AOF(Append Only File),給大家提供參考,一起學(xué)習(xí)下。
    2017-11-11
  • Redis中5種BitMap應(yīng)用場(chǎng)景及實(shí)現(xiàn)介紹

    Redis中5種BitMap應(yīng)用場(chǎng)景及實(shí)現(xiàn)介紹

    Redis BitMap是一種高效的位操作數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)在處理海量數(shù)據(jù)的布爾型狀態(tài)時(shí)尤其高效,下面小編就來和大家簡(jiǎn)單介紹一下5種它的應(yīng)用場(chǎng)景及實(shí)現(xiàn)方法吧
    2025-04-04
  • Redis 高可用與集群原理深度解析

    Redis 高可用與集群原理深度解析

    Redis高可用機(jī)制涵蓋主從復(fù)制、哨兵自動(dòng)故障轉(zhuǎn)移及Cluster集群分片與高可用,依賴Gossip協(xié)議實(shí)現(xiàn)節(jié)點(diǎn)通信與狀態(tài)同步,源碼解析了故障轉(zhuǎn)移流程,為后續(xù)持久化內(nèi)容奠定基礎(chǔ),本文給大家介紹Redis高可用與集群原理,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Redis五種數(shù)據(jù)結(jié)構(gòu)在JAVA中如何封裝使用

    Redis五種數(shù)據(jù)結(jié)構(gòu)在JAVA中如何封裝使用

    本篇博文就針對(duì)Redis的五種數(shù)據(jù)結(jié)構(gòu)以及如何在JAVA中封裝使用做一個(gè)簡(jiǎn)單的介紹。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 基于Redis實(shí)現(xiàn)基本搶紅包算法詳解

    基于Redis實(shí)現(xiàn)基本搶紅包算法詳解

    [key, value]的緩存數(shù)據(jù)庫(kù), Redis官方性能描述非常高, 所以面對(duì)高并發(fā)場(chǎng)景, 使用Redis來克服高并發(fā)壓力是一個(gè)不錯(cuò)的手段, 本文主要基于Redis來實(shí)現(xiàn)基本的搶紅包系統(tǒng)設(shè)計(jì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • redis實(shí)現(xiàn)好友關(guān)注&消息推送的方法示例

    redis實(shí)現(xiàn)好友關(guān)注&消息推送的方法示例

    Redis作為一款開源的內(nèi)存數(shù)據(jù)庫(kù),具有可靠性、速度快、易用性等優(yōu)點(diǎn),已經(jīng)被廣泛應(yīng)用于開發(fā)實(shí)際項(xiàng)目中,本文主要介紹了redis實(shí)現(xiàn)好友關(guān)注&消息推送的方法示例,感興趣的可以了解一下
    2023-10-10
  • 關(guān)于Redis數(shù)據(jù)庫(kù)入門詳細(xì)介紹

    關(guān)于Redis數(shù)據(jù)庫(kù)入門詳細(xì)介紹

    大家好,本篇文章主要講的是關(guān)于Redis數(shù)據(jù)庫(kù)入門詳細(xì)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 詳解Redis實(shí)現(xiàn)限流的三種方式

    詳解Redis實(shí)現(xiàn)限流的三種方式

    這篇文章主要介紹了詳解Redis實(shí)現(xiàn)限流的三種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

肃宁县| 中山市| 四会市| 商丘市| 马鞍山市| 延津县| 独山县| 兴城市| 宜丰县| 宜都市| 鹤峰县| 柘荣县| 南阳市| 唐河县| 利津县| 连云港市| 海林市| 古交市| 吐鲁番市| 芮城县| 天水市| 米林县| 泸西县| 高密市| 吴忠市| 平潭县| 双流县| 厦门市| 宁强县| 万荣县| 邹城市| 玛曲县| 宁武县| 黄山市| 上蔡县| 柯坪县| 枞阳县| 临沭县| 旌德县| 老河口市| 衡水市|