redis主从复制过程: 当配置好slave后,slave与master创建链接,而后发送sync命令。不管是第一次链接仍是从新链接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。若是master同时收到多个slave发来的同步链接命令,master只会启动一个进程来写数据库镜像,而后发送给全部的slave。master同步数据时是非阻塞式的,能够接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不可以响应客户端的查询。redis
能够在master禁用数据持久化,只须要注释掉master 配置文件中的全部save配置,而后只在slave上配置数据持久化。数据库
若是Master和Slave之间的连接出现断连现象,Slave能够自动重连Master,可是在链接成功以后,一次彻底同步将被自动执行。缓存
上面的这5步是同步的第一阶段,接下来在master服务器上调用每一个命令都在使用replicationFeedSlaves()来同步到slave服务器。bash
1.新建文件夹master-slave,在master-slave中新建master和slave,将redis.conf到master和slave文件夹中。服务器
2.修改master和slave的配置文件:端口号、进程文件和日志文件的位置。测试
3.修改slave的配置文件:spa
slaveof <masterip> <masterport> # 指定master的ip和port
masterauth <master-password> # master有验证的状况下
slave-read-only yes # 设置slave为只读模式,默认的
复制代码
4.分别进入到master和slave文件夹,启动 redis服务:redis-server redis.conf日志
5.客户端链接code
查看master的信息,输入 info,看到角色是mastercdn
查看slave的信息,输入info,看到的角色是slave,且
6.测试
在master中添加数据:set name xbq
在slave中查询数据:get name,结果和在master中插入的数据同样。
测试下 在slave中添加数据:set address shenzheng,发现报错,(error) READONLY You can't write against a read only slave.
这是由于 咱们设置了 slave为只读,不能够操做写。
1.用于对 数据的热备份
2.用于读写分离