前面主要是在数据结构和单机服务器角度分析redis的底层实现。本篇讲解的是多服务器上的redis怎么实现数据复制的。在redis中只支持主从复制。
复制是一个在数据库领域的基本的机制,每个数据库都有自己不同的实现方式。无论是RDB 还是NoSQL,会有复制这个概念。如MySQL中的复制,mongodb中的副本集等等。只要说到复制,就免不了谈俩个概念:数据一致性 和 读写分离,这两个概念也会在此博文中详细讲解。闲话不谈,开始正文。
15.1 SLAVEOF
复制的前提是先确立多台服务器的主从关系。redis中,一台服务器可以有多台从服务器。同样,一台从服务器也可以有多台从服务器。只要设置了从属关系,从服务器就就可以对其主服务器进行同步了。SLAVEOF 用于设置多台服务器的从属关系。
命令具体用法:
1. SLAVEOF masterhost Port
说明:把当前服务器设置为某服务器(masterhost)的从属服务器。如果当前服务器已经是某服务器的从属服务器,再执行此命令的话,此服务器会立即停止对旧数据库的同步,并且清空旧的数据集。然后对新服务器进行数据同步,成为新服务器的从服务器。
2. SLAVEOF NO ONE
说明:这是针对从服务器而言的。如果针对某从服务器执行此命令,那么它就会“终止”与原主服务器的关系,停止对原数据库的同步,但是不清空本服务器的数据集。在哨兵系统中,当主库挂掉之后,可对从库升级成主库。
15.2 复制
复制具体实现主要分为两个阶段:2.8版本之前 与 2.8版本之后。2.8之后的版本对2.8之前的版本的基础上进行了改进,进行了优化。两者的关系并不是说另起炉灶,而是发展进步。
1. Version 2.8之前