【学习笔记】Redis学习笔记——第15章 复制(slaveof)

第15章 复制(slaveof)

15.1 旧版复制功能的实现

1>同步:将从服务器状态同步成主服务器状态

2>命令传播:主服务器修改时,将修改传播到从服务器

15.1.1 同步

1>从服务器向主服务器发送SYNC命令

2>主服务器执行BGSAVE生成RDB文件,并用缓冲区记录所有写命令

3>从服务器载入RDB文件

4>主服务器将缓冲区的写命令发给从服务器执行

15.1.2 命令传播

主服务器不断把写命令发送给从服务器

15.2 旧版复制功能的缺陷

在从服务器断线重连后,会重新执行SYNC,而不是将之前的命令传播

15.3 新版复制功能的实现

PSYNC:在重连后,将断开后的写命令同步

15.4 部分重同步的实现

15.4.1 复制偏移量

主、从各自维护一个复制偏移量,表示已同步的状态字节数

15.4.2 复制积压缓冲区

如果积压缓冲区(1MB)包含了从服务器重新连接后需要写入的全部数据,则进行部分同步,否则进行SYNC

15.4.3 服务器运行ID

每个redis服务器都有自己的ID,从服务器保存了主服务器的运行ID,如果从服务器重新连接后更换了主服务器运行ID,则进行SYNC

15.5 PSYNC命令的实现

略,P209

15.6 复制的实现

1>从服务器设置主服务器的地址和端口

2>建立套接字链接

3>发送PING命令

4>身份验证

5>发送端口信息(主服务器记录从服务器端口信息)

6>同步

7>命令传播

8>可能发生的断线重同步

15.7 心跳检测

每一秒检测一次

15.7.1 检测主从服务器的网络连接状态

主服务器超过一秒未收到从服务器的ACK,则认为连接故障

15.7.2 辅助实现min-slaves配置选项

可配置从服务器最少数量或延迟都大于n秒时主服务器不接受写命令

15.7.3 检测命令丢失

心跳请求中包含偏移量,主服务器可通过该值判断是否发生了命令丢失

★单线程确实具有很多优势,很多功能的实现都可以变得特别简单


(PS:大学毕业之后也三年了,唯一一次感受到孤独竟然是在福建的深夜,衣柜中发现了一只巨大蟑螂,嗯,确实从小就害怕这个。

总是在觉得自己已经成熟,从容面对生活中发生一切的时候遇到一些奇奇怪怪的事情呢。)

相关推荐
疯狂打码的少年6 分钟前
【计算机网络】IP地址与子网划分(IP地址分类与特殊地址)
网络·笔记·tcp/ip·计算机网络
CappuccinoRose8 分钟前
专项事件体系
前端·学习·网络状态·表单事件·剪贴板事件·拖放事件·页面可见性
bessyon10 分钟前
从设备自购看医美机构的运营逻辑与竞争壁垒
笔记
(Charon)12 分钟前
【Kafka】消息队列学习(一):为什么需要Kafka?从消息队列到整体架构
学习·架构·kafka
吃饱了得干活30 分钟前
Redisson 进阶实战:看门狗机制与分布式锁完全指南
java·redis·后端
疯狂打码的少年37 分钟前
【计算机网络】TCP协议(三次握手、可靠传输、流量控制)
网络·笔记·tcp/ip·计算机网络
AIGC大时代42 分钟前
OpenAI Agents SDK 工程笔记:tool 调用循环、max_turns 与生产禁区
服务器·数据库·笔记·tool·max_turns·functiontool·生产禁区
传奇开心果编程44 分钟前
【Rust入门知识点学与练】第26课:Unsafe Rust
开发语言·学习·rust
励志不掉头发的内向程序员1 小时前
【LibreCAD 2D架构】从 addHistory 到 RS_UndoCycle:LibreCAD 里的两套 History 与撤销机制
开发语言·c++·qt·学习·系统架构
`流年づ1 小时前
人工智能学习笔记 - 自动微分
人工智能·笔记·学习