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
具体流程如下:
进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称为“数据库状态一致”,或者简称“一致”。
在Redis中,从服务器对主服务器的复制可以分成两种情况:
对于初次复制来说来说,旧版复制完全没有问题,但是断线重连之后,如果当时从服务器已经复制了一些,重连之后,从服务器需要重新复制,造成一些浪费。
旧版使用的是SYNC命令进行复制,是一个非常浪费资源的操作。
使用 PSYNC 命令替代 SYNC 命令来执行复制时的同步操作。
具有完整重同步(full resynchronization)和部分重同步(partial resynchronization)两种模式:
部分重同步功能由以下三个部分构成:
具体调用看流程图即可:
在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令:
$ REPLCONF ACK <replication_offset>
其中replication_offset是从服务器当前的复制偏移量。发送REPLCONF ACK有三个作用:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有