*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 数据 ...
*常见错误
- 非复制上下文:PSYNC 是内部命令,通常由从节点自动发起,手动调用可能导致异常。
*最佳实践
- 自动使用:PSYNC 由 Redis 内部自动调用,用于从节点复制。无需手动调用。
*FAQ
Q: PSYNC 和 SYNC 有什么区别? A: PSYNC 支持部分同步(只同步差异数据);SYNC 总是完整同步(传输整个 RDB 文件)。Redis 2.8+ 使用 PSYNC 替代 SYNC。
Q: 什么时候会触发完整同步? A: 当复制积压缓冲区不足(replica 离线时间过长)、复制 ID 不匹配(主节点切换)或首次同步时,触发完整同步。