Redis主从复制

Redis通过主从复制确保高可用性,采用读写分离,写操作仅在主库执行,随后同步到从库。全量复制时,主库生成RDB文件发送给从库,之后发送RDB文件生成后的新命令。网络断开后,Redis 2.8及以后版本采用增量复制恢复。主从库间通过repl_backlog缓冲区同步,防止数据不一致。
摘要由CSDN通过智能技术生成

之前没有了解过 Redis中 RDB 和 AOF 的小伙伴,点这里先了解下 RDB 和 AOF

如果 Redis 发生了宕机,它们可以分别通过回放日志和重新读入 RDB 文件的方式恢复数据,从而保证尽量少丢失数据提升可靠性。不过,即使用了这两种方法,也依然存在服务不可用的问题。

比如说,我们在实际使用时,只运行了一个Redis实例,如果这个实例宕机了,它在恢复期间,是无法服务新来的数据存取请求的。那么,我们总说的Redis具有高可靠性,又是什么意思呢?

其实,是有两层含义的

一是数据尽量少丢失

二是服务尽量少中断

AOF和RDB保证了 数据尽量少丢失,而对于服务尽量少中断,Redis的做法是增加副本冗余量,将一份数据同时保存在多个实例上。即使有一个实例出现了故障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。多实例保存同一份数据,听起来好像很不错,但是,我们必须要考虑一个问题。

这么多副本,它们之间的数据如何保持一致呢?数据读写操作可以发给所有的实例吗?

实际上,Redis提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。

  • 读操作:主库、从库都可以接收;
  • 写操作:首先到主库执行,然后,主库将写操作同步给从库。

在这里插入图片描述

那么,为什么要采用读写分离的方式呢?

你可以设想一下,在上面这张图中,不管是主库还是从库,都能接收客户端的写操作。那么,一个直接的问题就是,如果客户端对同一个数据(例如k1)前后修改了三次,每一次的修改请求都发送到不同的实例上,在不同的实例上执行。那么,这个数据在这三个实例上的副本就不一致了(分别是v1、v2和v3)。

在读取这个数据的时候,就可能读取到旧的值。如果我们非要保持这个数据在三个实例上一致,就要涉及到加锁、实例间协商是否完成修改等一系列操作,但这会带来巨额的开销,当然是不太能接受的。

而主从库模式一旦采用了读写分离,所有数据的修改只会在主库上进行,不用协调三个实例。主库有了最新的数据后,会同步给从库,这样,主从库的数据就是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值