手机网站在线生成,建设网站微商城,dedecms网站后台模板修改,企业招聘Redis主从同步是怎么实现的#xff1f;
主从节点建立连接后#xff0c;从节点会进行判断#xff1a;
1.如果这是从节点之前没有同步过数据
属于初次复制#xff0c;会进行全量重同步#xff0c;那么从节点会向主节点发送PSYNC?-1 命令#xff0c;请求主节点进行全量重…Redis主从同步是怎么实现的
主从节点建立连接后从节点会进行判断
1.如果这是从节点之前没有同步过数据
属于初次复制会进行全量重同步那么从节点会向主节点发送PSYNC?-1 命令请求主节点进行全量重同步。
2.如果从节点不是初次复制例如出现掉线后重连 这个时候从节点会将之前进行同步的Replication ID(一个随机字符串标识主节点上的特定数据集)和offset从服务器当前的复制偏移量通过PSYNC id offset命令发送给主节点主节点会进行判断
如果Replication ID跟当前的Replication ID不一致(可能主节点进行了变化)或者是当前buffer缓冲区中不存在对应的offset那么会跟上面的初次复制一样进行全量重同步。如果Replication ID跟当前的Replication ID一致并且当前buffer缓冲区中存在对应的offset那么会进行部分重同步。部分重同步是Redis 2.8之后的版本支持的主要基于性能考虑为了断线期间的小部分数据修改进行全量重同步效率比较低
全量重同步
主节点会执行BGSAVE命令fork出一个子进程在后台生成一个RDB持久化文件完成后发送给从服务器从节点接受并载入RDB文件使得从节点的数据库状态更新至主节点执行BGSAVE命令时的状态。并且在生成RDB文件期间主节点也会使用一个缓冲区来记录这个期间执行的所有写命令将这些命令发送给从节点从节点执行命令将自己数据库状态更新至与主节点完全一致。
部分重同步
因为此时从节点只是落后主节点一小段时间的数据修改并且偏移量在复制缓冲区buffer中可以找到所以主节点把从节点落后的这部分数据修改命令发送给从节点完成同步。
命令传播
在执行全量重同步或者部分重同步以后主从节点的数据库状态达到一致后会进入到命令传播阶段。主节点执行修改命令后会将修改命令添加到内存中的buffer缓冲区是一个定长的环形数组满了时就会覆盖前面的数据然后异步地将buffer缓冲区的命令发送给从节点。