redis主从同步-概览

现在这世道太卷了,写点博客都有点卖艺的感觉

配置

复制代码
replicaof 192.168.3.260 6379 # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica‐read‐only yes # 配置从节点只读

原理

1、master的slave 作为附属 首先这个自觉性必须到位,发送一个psync 给master长官请求复制数据sir(借助的是socker长连接)

2、master长官接收到psync请求后,在后台(那当然是后台了,小附属还能占自己大主线打这些杂七杂八的活),在后台master通过bgsave生成最新的 rdb快照(回旋的镖请注意):这期间那我的主线任务是不能停的,仍然接受着伟大客户端的请求,so客户端那些修改 的命令呐 存在内存repl buffer中(这么关键的时候多少得占点内存repl buffer

3、bgsave持久化完了之后呢,master会把send rdb文件数据集发送给slave

4、slave呢清空老数据接收加载master的持久化数据,加载到内存

5、然后master再将存在内存中那些修改命令发送给slave :send buffer,让slave去执行写命令,这样能一定程度上保证一致性

需要注意的是如果多个slave因为各种各样的原因(👻知道什么原因)和master断开了亲子关系,当他们在"认祖归宗"的时候,master可能接收到多个slave并发连接请求,master只会进行一次持久化,毕竟错的不在master ,多份也没必要,省时省力 大家都平安

当然每次都进行全量的持久化那很多情况下是没必要的,所以从2.8开始

断点续传

他来啦,他带着全村的希望走来啦

1、master在内存中创建复制数据的缓存队列,缓存最近的数据,所有人都维护了两个至关重要(甚至一绝生死)的东西,那就是 复制的数据下标offset 和 master的进程id

2、当网络断开,slave请求mater进行未完成的复制使命 **psync(offset):**从自己记录的下标开始复制,只能是自己记录的,别人家的你又偷不来,没得手脚撒~

3、如果slave的offset在repl backlog buffer 中,master就直接从缓存中将offset之后的数据一次性同步给slave,这样多省事:既然slave觉悟高,没有落后很多那就要褒奖,相反意味着差的很多直接全量同步,这也是为了大家好,万一有多差很多,不全量那就麻烦了

4、如果mster进程id变了,不得了 原来的皇帝没了,那保守起见 直接进行全量数据复制

如果很多个从节点要求从主节点复制数据,那不得了,master要忙不过来的了(复制风暴),分散压力就让从与从之前同步数据,而不是全部都从主复制,当臣子的主动为皇帝分担也是应该的

上面主要是为了增加趣味性,好学,为什么情感含义,不喜勿喷

主体讲完了,给大家附赠一下lua管道吧

管道

客户端一次性发送多个请求,等所有命令都发送完再一次性读取服务都响应,短短一句话就出现了两个一次性,这网络传输开销降低有多低可想而知

这一切可以归功于管道pipeline,管道执行多条命令的网络开销和执行一次的开销是一样的

注意的是处理完命令前先缓存之前命令的处理结果,所以打包的命令越多,消耗的内存越多,所以一切都需要适合而止

pipeline发送的命令都会被server立即执行,如果执行失败 失败信息会保存起来返回,不影响后面命令的执行

相关推荐
曲幽37 分钟前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
倔强的石头_18 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再5 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip