redis主從同步原理
#1.前言
在redis中為了確保redis的高可用,一般會搭建一個集群模式就是主從模式。
主從模式可以保證redis的高可用,那麼redis是怎麼保證主從伺服器的資料一致性的,接下來我們淺談下redis主(master)從(slave)同步的原理。
2.初次全量同步
當一個redis伺服器初次向主伺服器發送salveof指令時,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斷開重連之後會重新同步,重新同步分完全同步與部分同步
首先來看看部分同步大致的方向
- #當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.主從同步最終流程
#6.結語
最近公司需要,我搭建了一套redis主從集群並且用哨兵進行監聽實現主從切換。因此我根據《redis設計與實現》梳理了redis主從原理,給自己加深印象。
# 推薦教學:《redis教學》
以上是redis主從同步原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

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

Redis的核心功能是高性能的內存數據存儲和處理系統。 1)高速數據訪問:Redis將數據存儲在內存中,提供微秒級別的讀寫速度。 2)豐富的數據結構:支持字符串、列表、集合等,適應多種應用場景。 3)持久化:通過RDB和AOF方式將數據持久化到磁盤。 4)發布訂閱:可用於消息隊列或實時通信系統。

Redis的關鍵特性包括速度、靈活性和豐富的數據結構支持。 1)速度:Redis作為內存數據庫,讀寫操作幾乎瞬時,適用於緩存和會話管理。 2)靈活性:支持多種數據結構,如字符串、列表、集合等,適用於復雜數據處理。 3)數據結構支持:提供字符串、列表、集合、哈希表等,適合不同業務需求。

Redis是一個強大的數據庫解決方案,因為它提供了極速性能、豐富的數據結構、高可用性和擴展性、持久化能力以及廣泛的生態系統支持。 1)極速性能:Redis的數據存儲在內存中,讀寫速度極快,適合高並發和低延遲應用。 2)豐富的數據結構:支持多種數據類型,如列表、集合等,適用於多種場景。 3)高可用性和擴展性:支持主從復制和集群模式,實現高可用性和水平擴展。 4)持久化和數據安全:通過RDB和AOF兩種方式實現數據持久化,確保數據的完整性和可靠性。 5)廣泛的生態系統和社區支持:擁有龐大的生態系統和活躍社區,

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

Redis的數據庫方法包括內存數據庫和鍵值存儲。 1)Redis將數據存儲在內存中,讀寫速度快。 2)它使用鍵值對存儲數據,支持複雜數據結構,如列表、集合、哈希表和有序集合,適用於緩存和NoSQL數據庫。

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