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

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

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

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

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

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