*Redis PSYNC 命令

Redis 复制的内部命令,用于从节点向主节点请求部分或完整的数据同步。用于复制连接和故障转移后的同步。


*语法

PSYNC replicationid offset

*参数说明

参数 类型 必填 说明
replicationid String 主节点的复制 ID,首次同步传 ?
offset Integer 复制偏移量,首次同步传 -1

*返回值

条件 返回值
部分同步 +CONTINUE + 新 replicationid 和 offset
完整同步 +FULLRESYNC + replicationid + offset + RDB 数据

*时间复杂度

O(N),N 为同步的数据量。


*示例

# 从节点发起部分同步请求
> PSYNC 07c37dfeb235213a872192d90877d0cd55635b91 123456789
+CONTINUE
... 增量数据 ...

# 首次同步或无法部分同步
> PSYNC ? -1
+FULLRESYNC 07c37dfeb235213a872192d90877d0cd55635b91 0
... RDB 数据 ...

*常见错误

  1. 非复制上下文:PSYNC 是内部命令,通常由从节点自动发起,手动调用可能导致异常。

*最佳实践

  1. 自动使用:PSYNC 由 Redis 内部自动调用,用于从节点复制。无需手动调用。

*FAQ

Q: PSYNC 和 SYNC 有什么区别? A: PSYNC 支持部分同步(只同步差异数据);SYNC 总是完整同步(传输整个 RDB 文件)。Redis 2.8+ 使用 PSYNC 替代 SYNC

Q: 什么时候会触发完整同步? A: 当复制积压缓冲区不足(replica 离线时间过长)、复制 ID 不匹配(主节点切换)或首次同步时,触发完整同步。