Psync(部分重新同步)如何工作?
PSYNC 是Redis 主從復制中的部分重同步機制,用於在從服務器斷線重連後僅同步斷開期間丟失的數據,以提升同步效率。其核心依賴於復制積壓緩衝區(Replication Backlog),即主服務器維護的一個隊列,默認大小為1MB,保存最近執行的寫命令。當從服務器重連時,會發送PSYNC
PSYNC,也就是部分重同步,是Redis 在主從復製過程中用來優化斷線重連後數據同步效率的一種機制。簡單來說,當從服務器因為網絡波動等原因短暫斷開連接後重新連上主服務器時,Redis 不會直接進行全量同步(full resynchronization),而是嘗試只同步斷開期間丟失的那部分數據,這就是PSYNC 的核心作用。
什麼是複制積壓緩衝區(Replication Backlog)?
PSYNC 能夠實現的關鍵,在於Redis 主服務器維護的一個叫做“複製積壓緩衝區”的隊列。這個隊列保存了最近一段時間內主服務器執行的寫命令(以Redis 協議格式存儲)。當從服務器斷開重連後,它會告訴主服務器自己已經處理到哪個偏移量(offset),主服務器則檢查該偏移量是否還在積壓緩衝區中存在。
- 如果存在,就可以從中取出對應的數據繼續發送給從服務器,完成部分同步;
- 如果不存在(比如斷開時間太長,積壓緩衝區已覆蓋掉這部分數據),那就只能進行一次全量同步。
這個緩衝區是有大小限制的,默認是1MB,可以通過repl-backlog-size
配置項調整。
從服務器如何發起PSYNC 請求?
當從服務器重新連接到主服務器後,它會發送一個PSYNC <runid> <offset></offset></runid>
命令:
-
<runid></runid>
是上次連接的主服務器運行ID; -
<offset></offset>
是當前從服務器已經接收並處理到的位置。
主服務器收到這個請求後,會判斷兩個條件:
- 主服務器當前的runid 是否和從服務器傳來的runid 一致?
- 從服務器請求的offset 是否還在復制積壓緩衝區範圍內?
如果都滿足,主服務器就會從那個offset 開始發送後續的命令,否則就進入全量同步流程。
如何提高PSYNC 成功率?
要讓PSYNC 更容易成功,避免頻繁觸發全量同步,可以從以下幾個方面入手:
- 適當增大復制積壓緩衝區:如果你的業務寫入量很大,1MB 可能很快就被覆蓋掉。可以按需調大repl-backlog-size。
- 控制主從之間的網絡穩定性:雖然我們不能完全避免網絡問題,但盡量部署在低延遲、穩定的網絡環境中有助於減少不必要的全量同步。
- 合理設置從服務器重啟後的恢復策略:比如在重啟從服務器時,如果知道短時間內主服務器不會有太大變動,可以嘗試使用之前保存的runid 和offset 發起PSYNC 請求。
需要注意的是,PSYNC 並不適用於所有場景。比如主服務器重啟後runid 會改變,此時從服務器即使連接上了,也無法進行部分同步,必須全量同步。
基本上就這些。 PSYNC 的設計是為了提升主從同步的效率,理解它的機制可以幫助你更好地優化Redis 複製性能,特別是在網絡不穩定或寫入壓力較大的場景下。
以上是Psync(部分重新同步)如何工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

PSYNC是Redis主從復制中的部分重同步機制,用於在從服務器斷線重連後僅同步斷開期間丟失的數據,以提升同步效率。其核心依賴於復制積壓緩衝區(ReplicationBacklog),即主服務器維護的一個隊列,默認大小為1MB,保存最近執行的寫命令。當從服務器重連時,會發送PSYNC命令,主服務器據此判斷是否可進行部分同步:1.runid必須一致;2.offset必須位於積壓緩衝區內。若條件滿足,則從該偏移量繼續發送數據,否則觸發全量同步。提高PSYNC成功率的方法包括:1.適當增大repl-b

Quorum在RedisSentinel配置中是指觸發故障轉移前必須達成共識的Sentinel節點最小數量。例如,若設置5個Sentinel且quorum為3,則至少需3個Sentinel確認主節點不可達才會發起故障轉移。 1.Quorum決定標記主節點為主觀下線(SDOWN)和客觀下線(ODOWN)所需的最低共識數;2.設置過高可能導致無法及時故障轉移,設置過低可能引發誤判;3.推薦使用奇數個Sentinel並將quorum設為略超過總數的一半;4.需結合部署規模、容錯能力與網絡環境綜合考慮;5

RedissupportsgeospatialdatastorageandqueriesviaitsGeodatatype.1.UseGEOADDtostorecoordinatesasmembersunderakey,withsyntaxGEOADDkeylongitudelatitudemember.2.QuerynearbylocationsusingGEORADIUS,whichreturnsmemberswithinaspecifiedradiusfromagivenpoint,opt

RedisfunctionsInversion7SolveSissuesWithTraDitionAlluAscriptingByEnablingModular,Reusableserver-SideLogic.1.TheyAllowScrupturedFunctructUnctionDefinitionDefinitionDefinitionDefinitionDefinitionDefinityForBetterorGanization andmaintainabilition.2.theyimproverperformperformperformpperformanceThroughperformanceThroughLageLazyLazylazyLoadingAndCaching.3.theySupport

RedisStreamsissuitableforlightweightin-memorystreamprocessingwithinRedis,whileKafkaexcelsinhigh-throughput,durablelogstorageandRabbitMQincomplexroutingandguaranteeddelivery.RedisStreamsworkswellforreal-timeanalyticsorsmalljobqueueswherespeedmatters,K

ZRANGEretrieveselementsinascendingscoreorder,whileZREVRANGEreturnsthemindescendingorder.WhenworkingwithRedissortedsets,useZRANGEtogetthelowest-to-highestscores—idealforbottom-rankedentriesornaturalorderlistings—andZREVRANGEfortop-rankeditems,suchasst

HighCPUusageinRedisistypicallycausedbyinefficientqueries,excessiveclienttraffic,memorypressure,ormisconfigurations.Toaddressthis,first,checkforlargeorcomplexcommandslikeKEYS*,SMEMBERS,orLRANGEonbigdatasetsandreplacethemwithsaferalternativessuchasSCAN

保持對Redis最新特性和最佳實踐的了解,關鍵在於持續學習和關注官方與社區資源。 1.定期查看Redis官方網站、文檔更新和ReleaseNotes,訂閱GitHub倉庫或郵件列表,獲取版本更新通知並閱讀升級指南。 2.參與Redis的GoogleGroups郵件列表、Reddit子版塊及StackOverflow等平台的技術討論,了解他人使用經驗與問題解決方案。 3.搭建本地測試環境或使用Docker部署不同版本進行功能測試,在CI/CD中集成Redis升級測試流程,通過實際操作掌握特性價值。 4.關
