Hello,大家好,我是徐先生!

  虽然只工作了两年,但是作为一个专业的Java研发工作者,所发布的博客当中怎么能没有Redis呢?今天,我和伙伴们说说Java中Redis的主从复制。

首先,我们要了解什么是主从复制?

主从复制,是指将一台Redis服务器的数据,复制到其他Redis服务器上。其中,我们称这一台Redis服务器为主节点,其他Redis服务器称为从节点。主节点有且只能有一台,从节点则可以有一台或者多台(也可以没有),但是一个从节点必须要有一个主节点。在主从复制中,其数据的复制是单向的,只能由主节点复制到从节点。

那么,主从复制有什么作用呢?

1)故障恢复。当主节点出现故障时,可以由从节点提供服务,实现数据的快速故障恢复,避免因主节点出现的故障而引起巨大损失。

2)数据冗余。主从复制其实是数据的热备份,是持久化之外的一种数据冗余方式。

3)负载均衡。在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时,应用连接主节点;读Redis数据时,应用连接从节点)。实现分担服务器负载的作用。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

4)集群:据说主从复制对集群有极好的作用。

我们如何启动主从复制呢?

主从复制的开启,完全由从节点发起,不需要在主节点上做任何事情。

从节点开启主从复制,有三种方式:

1)配置文件。在从服务器的配置文件中加入: slaveof <masterip>  <masterprot>

2)启动命令。redis -server启动命令后加入: --slaveof <masterip> <masterport>

3)客户端命令。Redis服务器启动后,直接通过客户端执行命令: slaveof <masterip> <masterport>,则该Redis实例成为从节点。

如何实现主从复制的断开?

已建立主从复制关系的Redis服务器,可以通过slaveof no one断开。从节点断开复制后,不会删除已有的数据,只是不再接收主节点新的数据变化。

主从复制的实现原理

主从复制过程,答题可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。这个后面再说