对TinyRedis中主从复制的理解

TinyRedis 中有 master 和 replica 两种角色。master 作为服务端监听端口,既可以管理普通客户端连接,也可以接收 replica 建立的复制连接。replica 本身也是一个服务端,但对于 master 来说,它会额外作为客户端主动创建 socket fd 并 connect master。

连接建立后,replica 会通过 PING、REPLCONF、PSYNC 和 master 进行复制握手。第一次同步时 replica 发送 PSYNC ? -1,master 返回 FULLRESYNC,并把当前内存快照转换成 RESP 命令流发送给 replica,replica 在本地回放这些命令。

后续普通客户端只写 master。master 执行写命令成功后,会把这条写命令编码成 RESP Array,追加到 replication backlog,并写入所有 replica 连接的 writeBuf 进行传播。replica 收到后继续回放命令,从而跟上 master 的数据变化。

如果 replica 断线重连,会携带之前保存的 masterReplId 和 offset 发送 PSYNC <replid> <offset>。master 判断 replid 是否匹配、offset 是否仍在 backlog 范围内;如果满足条件,就返回 CONTINUE 并补发缺失命令,实现 partial resync;否则返回 FULLRESYNC 重新全量同步。

相关推荐
日取其半万世不竭15 小时前
用 Portainer 可视化管理 Docker:容器再多也不用背命令了
运维·docker·容器
kirs_ur16 小时前
ECC & LDPC — SSD 的数据卫士
服务器·数据库·性能优化
动恰客流统计18 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能
砍材农夫1 天前
运维|devops|jenkins构建应用发布
运维·jenkins·devops
△曉風殘月〆1 天前
如何在Linux中安装Qt开发环境
linux·运维·qt
爱写代码的阿森1 天前
鸿蒙三方库 | harmony-utils之RegexUtil正则匹配验证详解
服务器·华为·harmonyos·鸿蒙·huawei
雨的旋律20991 天前
ubuntu2604
linux·运维·服务器
Eloudy1 天前
ubuntu 22.04安装 cuda 12.8.2
linux·运维·ubuntu
三言老师1 天前
mkdir创建多级目录,目录创建基础实操
linux·运维·服务器
独孤--蝴蝶1 天前
Docker容器进阶(一)
运维·docker·容器