Redis 学习随笔(三)

126 阅读1分钟

       本次将介绍 Redis (2.8版本之后) 复制功能的具体实现。用户可以通过执行 slaveof 命令或者设置选项,让一个 Redis 服务器去复制另一台 Redis 服务器。被复制的服务器称为主服务器,复制的服务器称为从服务器。

一、相关概念

1、复制偏移量:主从服务器分别维护一个复制偏移量,每当主服务发送 N 个字节给从服务器时(命令传播),主从服务器的复制偏移量都会增加 N ( 有关这个的理解,个人认为是写命令的字节数,并不是键值对的字节数);

2、复制积压缓冲区(固定长度的 FIFO 队列):每次执行写命令时,除了会将命令传播给从服务器,同时也会将命令写入复制积压缓冲区。当从服务断线重连发送 PSYNC <run_id> 命令时,如果 offset + 1 在主服务的复制积压缓冲区里,则执行部分重同步,将偏移量之后的命令重播给从服务器,否则执行完全重同步。

3、运行 ID:每个服务器在启动时,都会维护自己的运行 ID,从服务器执行初次复制时,主服务器会将自己的 run_id 发送给从服务器。这样从服务器每次执行 PSYNC 时,会带上主服务器的运行 ID,如果断线重连的主服务器与参数 ID 一直,则执行部分重同步或者完全重同步,如果重连的主服务不是之前的主服务器,则执行完全重同步。

二、PSYNC 命令实现步骤