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

相关推荐
帷幕落秋5 小时前
信号、Ctrl 组合键与进程状态
linux·运维·面试
开开心心就好6 小时前
文件被占用删不掉?解锁工具强制删除
java·运维·服务器·开发语言·前端·pdf·ocr
小超人诞生日记6 小时前
Linux 进程优先级
linux·运维·服务器
西安同步电子6 小时前
嵌入式二次集成怎么选频率计模块?看懂这几个参数不踩坑
服务器·硬件工程
科技象限6 小时前
数据防泄漏系统:文件是怎么溜出门的,就该怎么堵
运维·网络·网络安全·安企神
cpolar技术支持6 小时前
端口被谁占了、这台机上开了哪些监听?本机起一个端口占用只读清单,cpolar 给异地同事远程看谁在监听
运维·python·内网穿透·cpolar·端口占用
在西安放羊的牛油果6 小时前
WebP 图片优化方案详解
运维·前端·架构
JavaPub-rodert6 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
云和数据.ChenGuang7 小时前
name=“张三“ age=18 weight=100.3 print (name,age,weight)
java·服务器·前端
学IT的周星星7 小时前
记忆系统:让 Agent 记住你是谁、上次聊到哪
运维·服务器·人工智能·windows·大模型·llm·agent