主从模式
首先slave连接到master,master会启动一个线程,并把最新的RDB文件发送给slave的,slave拿到之后做的第一件事情就是写进本地的磁盘,然后加载进内存。这个过程可能有新的写请求,master会通过AOF增量日志的方式将新数据同步给slave,就像MySQL的Binlog一样,把日志增量同步给slave服务
哨兵模式
基于主从方案的缺点还是很明显的,无法保证高可用,master挂了,整个服务挂了。而哨兵可以同时监视多个主从服务器,假如master挂了,可以Raft协议做选举将某个slave提升为master,然后由新的master继续接收命令
集群模式
依靠哨兵可以实现Redis的高可用,如果还想在支容纳海量的数据,那就需要Redis集群
- 无中心架构(不存在哪个节点影响性能瓶颈)
- 数据按照哈希槽(hash slot)分布存储在多个节点, 一个Redis集群包含16384个哈希槽
- 集群中的每个节点负责维护一部分哈希槽。 比如一个集群可以有三个节点:
- 节点 A 负责处理 0 号至 5500 号哈希槽
- 节点 B 负责处理 5501 号至 11000 号哈希槽
- 节点 C 负责处理 11001 号至 16384 号哈希槽
- 如果节点A向节点B发送ping消息,节点B没有在规定的时间内响应,那么节点A会标记节点B为疑似下线状态,同时把B的状态通过消息的方式发送给其他节点,如果超过半数以上的节点都标记B为疑似下线状态,B就会被标踢出集群,然后将会发生故障转移,优先从复制数据较多的从节点选择一个成为主节点,整个过程和哨兵非常类似,都是基于Raft协议做选举。
