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

相关推荐
半摆烂日常11 分钟前
自建WMS和买成品:三年成本对比
大数据·服务器·数据库·python·深度学习·低代码·numpy
宋军涛41 分钟前
Windows 操作系统【任务计划程序】简单使用
服务器·windows
蒸蒸yyyyzwd1 小时前
cpp 选手秋招学习笔记 day27
服务器·c++·面试·八股
Lsetea1 小时前
ACME 报 rate limit:Let‘s Encrypt 限速类型与重试策略
运维·https·证书·ssl·acme
大模型码小白1 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
A黄俊辉A1 小时前
两分钟上手docker
运维·docker·容器
青瓦梦滋1 小时前
NAT技术
linux·服务器·网络·网络协议·tcp/ip
啦啦啦啦啦zzzz2 小时前
自定义日志缓冲区(上)c++20
linux·服务器·c++·网络编程
邪修king2 小时前
Re: Linux系统篇(十八):进程篇(七): 进程深度解析:从 fork 创建到退出的完整旅程(附写时拷贝原理 + 代码实战)
java·linux·运维
keyipatience3 小时前
IP网络层
服务器·网络·网络协议·ubuntu·http