redis 主从同步-master端
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内部主要实现两个事情,都是和数据传输有关: