redis自身提供了主从的机制,通过配置可以实现服务的备份(Master->Slave)。
配置项
slaveof <masterip> <masterport>
masterauth <master-password> <master password=""> //如果master设置了requirepass password </master>
复制流程
- Slave启动或重新与Master连接时,向Master发送SYNC
- Master收到SYNC判断后台是否有正在进行的内存快照保存子进程,没有则启动一个快照保存子进程,有则等待快照保存完成,将快照文件传送给要求同步的Slave
- Slave收到快照文件后,清空内存,加载该快照
- Master在保存快照过程中,会把改变数据集的命令缓存到一队列中,后续依次发给Slave;在以后的连接未中断过程中,会逐一发送写命令到Slave
使用注意
1.通常Master可以配置成只写、不保存,Slave负责对外读、以及持久化(slave-read-only yes)
2.slave在与Master断开连接或正在同步快照时,通过配置slave可以继续接收读请求或者拒绝请求
slave-serve-stable-data yes //继续提供服务
slave-server-stable-data no//不提供服务,返回错误"SYNC with master in progress"
3.redis没有增量复制,每次新建同步连接都会全量同步快照。slave过多或者网络不稳定导致同步请求多,会增加Master的压力,影响其性能
4.redis作为缓存比较合适,做为数据库存储,那它的持久化、复制都有缺陷:重启时恢复内存、复制数据都要比较长的时间,出现延迟
5.Master如果采用AOF持久化,会出现同时写AOF和RDB的情况,响应会受到影响
本文做为铺垫,用于对搭建redis集群做准备。