目录
什么是复制积压缓冲区(Replication Backlog)?
从服务器如何发起 PSYNC 请求?
如何提高 PSYNC 成功率?
首页 数据库 Redis Psync(部分重新同步)如何工作?

Psync(部分重新同步)如何工作?

Jul 29, 2025 am 12:27 AM

PSYNC 是 Redis 主从复制中的部分重同步机制,用于在从服务器断线重连后仅同步断开期间丢失的数据,以提升同步效率。其核心依赖于复制积压缓冲区(Replication Backlog),即主服务器维护的一个队列,默认大小为 1MB,保存最近执行的写命令。当从服务器重连时,会发送 PSYNC 命令,主服务器据此判断是否可进行部分同步:1. runid 必须一致;2. offset 必须位于积压缓冲区内。若条件满足,则从该偏移量继续发送数据,否则触发全量同步。提高 PSYNC 成功率的方法包括:1. 适当增大 repl-backlog-size;2. 保持主从网络稳定;3. 合理设置从服务器重启后的恢复策略。需要注意的是,主服务器重启会导致 runid 变化,使 PSYNC 失效,必须进行全量同步。

How does PSYNC (partial resynchronization) work?

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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

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)

热门话题

PHP教程
1592
276
Psync(部分重新同步)如何工作? Psync(部分重新同步)如何工作? Jul 29, 2025 am 12:27 AM

PSYNC是Redis主从复制中的部分重同步机制,用于在从服务器断线重连后仅同步断开期间丢失的数据,以提升同步效率。其核心依赖于复制积压缓冲区(ReplicationBacklog),即主服务器维护的一个队列,默认大小为1MB,保存最近执行的写命令。当从服务器重连时,会发送PSYNC命令,主服务器据此判断是否可进行部分同步:1.runid必须一致;2.offset必须位于积压缓冲区内。若条件满足,则从该偏移量继续发送数据,否则触发全量同步。提高PSYNC成功率的方法包括:1.适当增大repl-b

如何在Redis中存储和查询地理空间数据? 如何在Redis中存储和查询地理空间数据? Jul 29, 2025 am 12:20 AM

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

Redis Sentinel配置中的法定人数是什么? Redis Sentinel配置中的法定人数是什么? Aug 02, 2025 am 02:41 AM

Quorum在RedisSentinel配置中是指触发故障转移前必须达成共识的Sentinel节点最小数量。例如,若设置5个Sentinel且quorum为3,则至少需3个Sentinel确认主节点不可达才会发起故障转移。1.Quorum决定标记主节点为主观下线(SDOWN)和客观下线(ODOWN)所需的最低共识数;2.设置过高可能导致无法及时故障转移,设置过低可能引发误判;3.推荐使用奇数个Sentinel并将quorum设为略超过总数的一半;4.需结合部署规模、容错能力与网络环境综合考虑;5

版本7中的redis功能是什么? 版本7中的redis功能是什么? Jul 28, 2025 am 12:05 AM

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

REDIS流如何与RabbitMQ或Kafka之类的消息队列进行比较? REDIS流如何与RabbitMQ或Kafka之类的消息队列进行比较? Jul 30, 2025 am 12:49 AM

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

如何对redis实例进行故障排除,该实例消耗过多的CPU? 如何对redis实例进行故障排除,该实例消耗过多的CPU? Aug 14, 2025 am 11:18 AM

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

您如何对Redis的最新功能和最佳实践保持更新? 您如何对Redis的最新功能和最佳实践保持更新? Aug 20, 2025 pm 02:58 PM

保持对Redis最新特性和最佳实践的了解,关键在于持续学习和关注官方与社区资源。1.定期查看Redis官方网站、文档更新和ReleaseNotes,订阅GitHub仓库或邮件列表,获取版本更新通知并阅读升级指南。2.参与Redis的GoogleGroups邮件列表、Reddit子版块及StackOverflow等平台的技术讨论,了解他人使用经验与问题解决方案。3.搭建本地测试环境或使用Docker部署不同版本进行功能测试,在CI/CD中集成Redis升级测试流程,通过实际操作掌握特性价值。4.关

Zrange和Zrevrange有什么区别? Zrange和Zrevrange有什么区别? Aug 04, 2025 am 01:05 AM

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

See all articles