对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 重新全量同步。

相关推荐
銳昊城1 小时前
项目六: 配置与管理DNS服务器(2) C2
运维·服务器
搞科研的小刘选手2 小时前
【天津市电源学会主办】第七届能源电力与自动化工程国际学术会议(ICEPAE 2026)
运维·自动化·能源·电力·电气·控制工程·节能
恋奴娇2 小时前
ubuntu 25 突破pipewire 不能以root帐号运行 系统没有声音输入输出设备
linux·运维·ubuntu
MuYan~2 小时前
开发环境内网MySQL连接操作文档
运维·服务器
Bert.Cai2 小时前
Linux dirname命令详解
linux·运维·服务器
程序 代码狂人2 小时前
Linux查询自己环境的一些基础命令
linux·运维·服务器
aerror2 小时前
如何使用ubuntu搭建一个无盘PC启动服务器
linux·服务器·ubuntu
合合技术团队3 小时前
海外发票智能解析:跨版式、多税制票据的自动化处理方案(附GitHub项目地址)
运维·自动化·github·ocr
东风破1373 小时前
DM存储过程及系统 表,系统视图,以及常规的运维SQL语句
运维·数据库·dm达梦数据库