redis 主从同步-master端

 我来答
白露饮尘霜17
2022-06-26 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6920
采纳率:100%
帮助的人:38.7万
展开全部

redis数据淘汰原理
redis过期数据删除策略
redis server事件模型
redis cluster mget 引发的讨论
redis 3.x windows 集群搭建
redis 命令执行过程
redis string底层数据结构
redis list底层数据结构
redis hash底层数据结构
redis set底层数据结构
redis zset底层数据结构
redis 客户端管理
redis 主从同步-slave端
redis 主从同步-master端
redis 主从超时检测
redis aof持久化
redis rdb持久化
redis 数据恢复过程
redis TTL实现原理
redis cluster集群建立
redis cluster集群选主

 redis 主从同步的过程始于一系列类似tcp三次握手的过程,归于"sync/psync"命令。分析redis主从同步master端的处理逻辑需要从syncCommand的函数开始进行分析。

 redis 主从同步过程中 master的执行内容 包括:


 整个处理逻辑主要分为处理 部分同步命令psync 全量同步命令sync ,整个交互过程如下

需要针对触发bgsave命令的部分作下详细说明,因为这个是核心的关键点:


 判断能够通过部分数据同步实现的逻辑很简单,主要从两个维度进行判断:


 众所周知rdb文件生成是内部fork新的线程去执行rdb生成过程的,通过rdbSaveBackground的函数可以看出来内部通过fork()去实现rdb文件的生成过程。
在fork的线程当中执行rdbSave实现rdb文件的生成过程。



rdb文件的生成过程其实挺简单的 ,大概流程如下:


 通过检查server.rdb_child_pid或者server.aof_child_pid确认是否执行rdb文件生成或者aof文件写入。



 bgsave完成后我们执行updateSlavesWaitingBgsave来实现rdb数据的同步。



  在updateSlavesWaitingBgsave过程中我们把和slave连接的socket注册写事件到eventLoop当中且回调函数为sendBulkToSlave,通过该回调函数实现rdb文件的传输。
  可以看出来整个同步过程中我们会同步master到所有的slave节点,注意是所有的slave节点。



  sendBulkToSlave内部主要实现两个事情,都是和数据传输有关:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式