首頁 資料庫 Redis redis主從同步原理

redis主從同步原理

Jun 22, 2020 pm 01:22 PM

redis主從同步原理

#1.前言

在redis中為了確保redis的高可用,一般會搭建一個集群模式就是主從模式。

主從模式可以保證redis的高可用,那麼redis是怎麼保證主從伺服器的資料一致性的,接下來我們淺談下redis主(master)從(slave)同步的原理。

2.初次全量同步

當一個redis伺服器初次向主伺服器發送salveof指令時,redis會從伺服器進行一次全量同步,同步的步驟如下圖所示:

redis主從同步原理

  • #slave伺服器向master發送psync指令(此時發送的是psync ? -1 ),告訴master我需要同步資料了。
  • master接收到psync指令後會進行BGSAVE指令產生RDB檔快照。
  • 生成完後,會將RDB檔案傳送給slave。
  • slave接收到檔案會載入RDB快照,並且將資料庫狀態變更為master在執行BGSAVE時的狀態一致。
  • master會傳送所有儲存在緩衝區裡的指令,告訴slave可以進行同步了
  • slave執行這些寫入指令。

3.指令傳播

#slave已經同步過master了,那麼如果後續master進行了寫入操作,比如說一個簡單的set name redis,那麼master執行過目前指令後,會將目前指令傳送給slave執行一遍,達成資料一致性。

4.重新複製

當slave斷開重連之後會重新同步,重新同步分完全同步與部分同步

首先來看看部分同步大致的方向

redis主從同步原理

  • #當slave斷開重連後,會傳送psync  指令給master。
  • master收到psync後會返回 continue回复,表示slave可以執行部分同步了。
  • master發送斷線後的寫指令給slave
  • #slave執行寫入指令。

實際上當slave傳送psync指令給master之後,master還需要依照下列三點判斷是否要進行部分同步。

先來介紹一下是哪三個面向:

  • 伺服器運行ID

每個redis伺服器開啟後會產生運行ID。

當進行初次同步時,master會將自己的ID告訴slave,slave會記錄下來,當slave斷線重連後,發現ID是這個master的就會嘗試進行部分重同步。當ID與現在連接的master不一樣時會進行完整重同步。

  • 複製偏移

複製偏移包含master複製偏移量和slave複製偏移量,當初次同步過後兩個資料庫的複製偏移量相同,之後master執行一次寫入指令,那麼master的偏移量1,master會寫指令給slave,slave執行一次,slave偏移量1,這樣版本就能一致。

  • 複製積壓緩衝區

#複製積壓緩衝區是由master維護的固定長度的先進先出的佇列。

當slave傳送psync,會將自己的偏移量也傳送給master,當slave的偏移量之後的資料在緩衝區還存在,就會傳回continue通知slave進行部分重同步。

當slave的偏移量之後的資料不在緩衝區了,就會進行完整重同步。

結合以上三點,我們又可以總結下:

#
  • 當slave斷開重連後,會傳送psync  指令給master。
  • master首先會對伺服器執行id進行判斷,如果與自己相同就進行判斷偏移量
  • master會判斷自己的偏移量與slave的偏移量是否一致。
  • 如果不一致,master會去緩衝區中判斷slave的偏移量之後的資料是否存在。
  • 如果存在就會返回 continue回复,表示slave可以執行部分同步了。
  • master發送斷線後的寫指令給slave
  • #slave執行寫入指令。

5.主從同步最終流程

redis主從同步原理

#6.結語

最近公司需要,我搭建了一套redis主從集群並且用哨兵進行監聽實現主從切換。因此我根據《redis設計與實現》梳理了redis主從原理,給自己加深印象。

# 推薦教學:《redis教學

以上是redis主從同步原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Redis是SQL還是NOSQL數據庫?答案解釋了 Redis是SQL還是NOSQL數據庫?答案解釋了 Apr 18, 2025 am 12:11 AM

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

REDIS的角色:探索數據存儲和管理功能 REDIS的角色:探索數據存儲和管理功能 Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解其架構和目的 REDIS:了解其架構和目的 Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

REDIS:它如何充當數據存儲和服務 REDIS:它如何充當數據存儲和服務 Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS:NOSQL方法的優勢 REDIS:NOSQL方法的優勢 Apr 27, 2025 am 12:09 AM

Redis是NoSQL數據庫,提供高性能和靈活性。 1)通過鍵值對存儲數據,適合處理大規模數據和高並發。 2)內存存儲和單線程模型確保快速讀寫和原子性。 3)使用RDB和AOF機制進行數據持久化,支持高可用性和橫向擴展。

REDIS:探索其功能和功能 REDIS:探索其功能和功能 Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

REDIS:現實世界的用例和示例 REDIS:現實世界的用例和示例 Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:揭示其目的和關鍵應用程序 REDIS:揭示其目的和關鍵應用程序 May 03, 2025 am 12:11 AM

Redisisanopen-Source,內存內部的庫雷斯塔氏菌,卡赫和梅斯吉級,excellingInsPeedAndVersatory.itiswidelysusedforcaching,Real-Timeanalytics,Session Management,Session Managements,and sessighterboarderboarderboardobboardotoitsssupportfortfortfortfortfortfortfortfortorvortfortfortfortfortfortforvortfortforvortforvortforvortfortforvortforvortforvortforvortdatastherctuct anddatataCcessandcessanddataaCces

See all articles