版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/IT_10/article/details/89424422
主配置
1 daemonize yes
2 pidfile /var/run/redis-6382.pid
3 port 6382
4 logfile "/usr/local/redis/redis-5.0.4/data/6382.log"
5 dbfilename dump-6382.rdb
6 dir /usr/local/redis/redis-5.0.4/data/
7 slave-read-only yes
从配置
1 daemonize yes
2 pidfile /var/run/redis-6383.pid
3 port 6383
4 logfile "/usr/local/redis/redis-5.0.4/data/6383.log"
5 dbfilename dump-6383.rdb
6 dir /usr/local/redis/redis-5.0.4/data/
7 slaveof 127.0.0.1 6382
开启主从redis
redis-server redis-6382.conf
查看是否开启成功
ps -aux | grep redis
开启客户端redis
redis-cli -p 6382
查看replication
查看run_id(标识作用)
redis-cli -p 6382 info server | grep run
全量复制
对于一个存储了很多信息的master,slave需要同步连接master之前的数据,以及连接当前的数据,就用到全量复制。
1.psyns ? -1 第一个参数表示run_id 第二个参数表示偏移量,第一次不知道两个值,所以传?和-1
2.master收到slave的消息后,把run_id和偏移量传给slave
3.slave报错master的基本信息
4.master生成快照,bgsave是触发redis生成快照的方式之一
5.redis的buffer缓冲区中保存了最新数据
部分复制
如果slave突然断开连接,为保证这段时间master中的数据不会再slave中丢失,当slave再次连接的时候,使用部分复制实现数据同步(虽然可以使用全量复制,但是全量复制开销大)
下图中的第四步,slave把自己的run_id和偏移量给master,如果master发现偏移量在自己的buffer(队列)内,则返回contiune,把buffer中的数据传给slave,如果超出了buffer,为了保证数据不丢失,则只能使用全量复制。这样,slave和master数据就能达到同步。