使用 AOF 和 RDB,如果 redis 发生了宕机,可以分别通过回放日志和重新读入 RDB 快照来恢复数据,保证尽量少丢失数据,提升可靠性。但如果只有一个 redis 实例,这个 redis 不幸宕机了,在它恢复期间,就无法服务新来的数据存取请求。
因此,redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。
- 读:主、从库都可以接收;
- 写:首先到主库执行,然后主库将写操作同步到从库。
采用读写分离的原因:如果不管主库还是从库,都能接收客户端的写操作,那么可能客户端对同一个数据前后修改了三次,每次修改的请求都发送到不同的实例上,在不同的实例上执行,那么这个数据在这三个实例上的副本就不一致了。这个时候读取这个数据,就可能读取到旧的值。如果采取加锁的方式来完成修改一致性,就会带来巨额的开销。所以采用读写分离的方式,所有数据的修改只在主库上进行,再同步给从库,这样,主从库的数据就是一致的。
主从库间如何进行第一次同步?
当我们启动多个 redis 实例的时候,它们之间可以通过 replicaof(redis5.0之前使用slaveof)命令形成主从库的关系,之后会按照三个阶段完成数据的第一次同步。如下图所示: