目录
考察目的
这个问题还是有一定的深度,平时在工作中很少会涉及到这方面的内容。
从这个问题的考察意图来看,很明显是考察求职者对于Redis底层原理的理解程度。另外,目标公司可能需要涉及到Redis中间件的日常运维。
同时,面试官也是通过技术原理来达到筛选高级或者资深Java开发的目的。
问题分析
Redis主从复制,是指在Redis集群里面(如图),Master节点和Slave节点数据同步的一种机制。
简单来说就是把一台Redis服务器的数据,复制到其他Redis服务器中。
其中负责复制数据的来源称为master,被动接收数据并同步的节点称为slave
在Redis里面,提供了全量复制和增量复制两种模式。
全量复制一般发生在Slave节点初始化阶段,这个时候需要把master上所有数据都复制一份。
具体的工作原理是:
1. Slave向Master发送SYNC命令,Master收到命令以后生成数据快照
2. 把快照数据发送给Slave节点,Salve节点收到数据后丢弃旧的数据,并重新载入新的数据
需要注意,在主从复制过程中,Redis并没有采用实现强数据一致性,因此会存在一定时间的数据不一致问题。
增量复制,就是指Master收到数据变更之后,把变更的数据同步给所有Slave节点。增量复制的原理是,Master和Slave都会维护一个复制偏移量(offset),用来表示Master向Slave传递的字节数。
每次传输数据,Master和Slave维护的Offset都会增加对应的字节数量。
Redis只需要根据Offset就可以实现增量数据同步了。
问题解答
Redis主从复制包括全量复制和增量复制:
全量复制是发生在初始化阶段,从节点会主动向主节点发起一个同步请求,主节点收到请求后会生成一份当前数据的快照发送给从节点,从节点收到数据进行加载后完成全量复制。
增量复制是发生在每次Master数据发生变化的过程中,会把变化的数据同步给所有的从节点。
增量复制是通过维护Offset这个复制偏移量来实现的。