Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制。
同时redis支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
一. 主从复制过程
1. 全量复制:
Redis全量复制一般发生在Slave启动阶段,这时Slave需要将Master上的所有数据都复制一份:
- 从服务器连接主服务器,并向其发送SYNC命令。
- 主服务器接收到命令后,执行bgsave命令(RDB持久化)保存快照并使用缓冲区记录此后执行的所有写命令。
- 主服务器向从服务器发送生成的rdb文件和记录在缓冲区的命令。
- 从数据库收到文件后删除旧数据,将新数据载入。并执行缓冲区的命令
不了解redis持久化的可以先看:redis持久化RDB和AOF
2. 增量复制:
主服务器和从服务器正常工作后,将主服务器的写操作同步到从服务器上。
创建主从关系及数据复制过程:
- 保存主节点信息
- 从节点与主节点建立网络连接。从节点会建立一个socket套接字,专门用于接受主节点发送的复制命令。
如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行slaveof no one取消复制。
- 连接建立成功后从节点发送ping请求进行首次通信,其目的是:
- 检测主从之间网络套接字是否可用
- 检测主节点当前是否可接受处理命令
若ping不通或超时,从节点断开复制连接,