Redis的单机模式不难,配置文件参数了解具体含义,设定业务上符合自己的就好了。
之前记录了关于Redis的数据结构和对象的知识(可以点Redis标签看看),下面开始填坑。
在Redis中,用户可以通过执行 SLAVEOF 命令或者设置 slaveof 选项,让一个服务去复制(replicate)另一个服务器。「被复制」的服务器为「主服务器(master)」,另一「个对主服务器进行复制」的服务器则被称为「从服务器(slave)」
举个?:(Redis版本是4.0.8)
在6379端口启动一个redis-server:
$ redis-server --port 6379
$ redis-cli -p 6379
127.0.0.1:6379>
在6380端口号启动一个redis-server,接着通过slaveof命令进行复制
$ redis-server --port 6380
$ redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
在这里,6379 是主服务器,6380 是从服务器。
接着能在 6380 的 redis-server 界面中看到日志:
19092:S 23 Mar 01:00:26.944 * Before turning into a slave, using my master parameters to synthesize a cached master: I may be able to synchronize with the new master with just a partial transfer.
19092:S 23 Mar 01:00:26.945 * SLAVE OF 127.0.0.1:6379 enabled (user request from 'id=2 addr=127.0.0.1:60778 fd=8 name= age=50 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=slaveof')
19092:S 23 Mar 01:00:27.234 * Connecting to MASTER 127.0.0.1:6379
19092:S 23 Mar 01:00:27.234 * MASTER <-> SLAVE sync started
19092:S 23 Mar 01:00:27.234 * Non blocking connect for SYNC fired the event.
19092:S 23 Mar 01:00:27.246 * Master replied to PING, replication can continue...
19092:S 23 Mar 01:00:27.246 * Trying a partial resynchronization (request 2e56cf1343f6b2e864c968bd59b4a16ed78b8f1d:1).
19092:S 23 Mar 01:00:27.266 * Full resync from master: bf36b20c3942e91ac4f262a2afdc90970b2d7c54:0
19092:S 23 Mar 01:00:27.266 * Discarding previously cached master state.
19092:S 23 Mar 01:00:27.441 * MASTER <-> SLAVE sync: receiving 187 bytes from master
19092:S 23 Mar 01:00:27.442 * MASTER <-> SLAVE sync: Flushing old data
19092:S 23 Mar 01:00:27.442 * MASTER <-> SLAVE sync: Loading DB in memory
19092:S 23 Mar 01:00:27.442 * MASTER <-> SLAVE sync: Finished with success
具体流程如下:
进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称为**“数据库状态一致”,或者简称“一致”**。
旧版指的是2.8之前
在Redis中,从服务器对主服务器的复制可以分成两种情况:
对于初次复制来说来说,旧版复制完全没有问题,但是断线重连之后,如果当时从服务器已经复制了一些,重连之后,从服务器需要重新复制,造成一些浪费。
「旧版使用的是SYNC命令进行复制」,是一个非常浪费资源的操作。
使用 PSYNC 命令替代 SYNC 命令来执行复制时的同步操作。
具有**完整重同步(full resynchronization)「和」部分重同步(partial resynchronization)**两种模式:
部分重同步功能由以下三个部分构成:
具体调用看流程图即可:
在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令:
$ REPLCONF ACK <replication_offset>
其中replication_offset是从服务器当前的复制偏移量。 发送REPLCONF ACK有三个作用: