Redis的复制功能

161 阅读2分钟

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

Redis的复制功能

redis的复制功能分为同步和命令传播

同步是从服务器的数据库状态更新到主服务器当前所处的数据库状态

命令传播是主服务器的数据库被修改,导致主从不一致,让主从服务器的数据库一致

同步

当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,也就是从服务器的数据库状态更新为主服务器当前所处的数据库状态。

从服务器对主服务器同步操作需要通过向主服务器发送SYNC命令,具体步骤:

  1. 从服务器向主服务器发送SYNC命令
  2. 收到SYNC命令的主服务器执行BGSAVE命令,从后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令
  3. 当主服务器的BGSAVE命令执行完成后,主服务器会将BGSAVE命令生成的RDB文件发送给从服务器,从服务器接收并载入这个RDB文件,将自己的数据库状态更新到主服务器执行BGSAVE命令时的数据库状态
  4. 主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新到主服务器数据库当前的状态

简单来说就是从服务器发送SYNC命令,主服务器发送RDB文件给从服务器,然后主服务器把生成RDB文件期间的写命令发送给从服务器,这样实现了主从服务器的数据库状态一致。

但是如果主服务器又进行了写命令操作等,主从不一致了,这就需要命令传播了。

命令传播

命令传播操作就是主服务器会将自己执行的写命令,也就是造成主从服务器的写命令发送给从服务器执行,当从服务器执行了相同的写命令之后,主从服务器将再次回到一致状态。