复制命令的命名变化
在很长的一段时间里,Redis 一直使用 作为复制命令,但是从 5.0.0 版本开始,Redis 正式将 SLAVEOF
命令改名成了 REPLICAOF
命令并逐渐废弃原来的 SLAVEOF
命令。因此,如果你使用的是 Redis 5.0.0 之前的版本,那么请使用 SLAVEOF
命令代替本章中的 REPLICAOF
命令,并使用 slaveof
配置选项代替本章中的 replicaof
配置选项。与此相反,如果你使用的是 Redis 5.0.0 或之后的版本,那么就应该使用 REPLICAOF
命令而不是 SLAVEOF
命令,因为后者可能会在未来的某个时候被正式废弃。
用户可以通过执行 REPLICAOF
命令,将接收这个命令的 Redis 服务器设置为另一个 Redis 服务器的从服务器:
命令的 host
参数用于指定主服务器的地址,而 参数则用于指定主服务器的端口号。因为 Redis 的复制操作是以异步方式进行的,所以收到 REPLICAOF
命令的服务器在记录主服务器的地址和端口之后就会向客户端返回 OK
,至于实际的复制操作则会在后台开始执行。
- 127.0.0.1:12345> REPLICAOF 127.0.0.1 6379
在接收到 REPLICAOF
命令之后,主从服务器将执行数据同步操作:从服务器原有的数据将被清空,取而代之的是主服务器传送过来的数据副本。数据同步完成之后,主从服务器将拥有相同的数据。
在将 127.0.0.1:12345
设置为 127.0.0.1:6379
的从服务器之后,如果我们在主服务器 127.0.0.1:6379
执行以下命令,创建出一个 msg
键:
- 127.0.0.1:6379> SET msg "hello world"
- OK
- 127.0.0.1:6379> GET msg
那么这个 msg
键在从服务器 127.0.0.1:12345
上应该也能够访问到:
用户除了可以使用 命令将运行中的 Redis 服务器设置为从服务器之外,还可以通过设置 replicaof
配置选项,在启动 Redis 服务器的同时将它设置为从服务器:
- replicaof <host> <port>
- $ redis-server --port 10086 --replicaof 127.0.0.1 6379
在使用 REPLICAOF
命令或者 replicaof
配置选项将一个服务器设置为从服务器之后,我们可以通过执行以下命令,让从服务器停止进行复制,重新变回主服务器:
服务器在停止复制之后不会清空数据库,而是会继续保留复制产生的所有数据。
比如说,对于之前设置的从服务器 127.0.0.1:12345
,我们可以通过执行以下命令,让它停止进行复制,重新变回主服务器:
- 127.0.0.1:12345> REPLICAOF no one
- OK
命令返回 OK
表示复制已经停止。因为服务器在停止复制之后仍然会保留复制时产生的数据,所以我们可以继续访问之前设置的 msg
键:
- "hello world"