Q1:redis的一致性是怎么实现的?
- redis和mysql一致性实现:redis是从mysql获取的信息,更新信息时先更新mysql数据,再同步到redis中;如果出现redis与mysql数据不一致,则redis会检查mysql数据,之后同步到本地
- redis保证内部(主从)数据一致性:每次从节点建立或主节点重新选举,都会执行“全量复制”,slave节点全量复制最新的master所有数据。redis集群工作正常时,slave会采用“增量复制”对每一次master新执行的修改命令做同步。
Q2: RDB快照的过程?
生成rdb快照过程两个命令:
-
save:会阻塞redis主进程,性能低不建议使用
-
bgsave:从主进程fork一个子进程,由子进程异步执行rdb快照任务,避免主进程阻塞;
Q3:为什么fork进程能够读到快照数据?
bgsave子进程是由主线程fork生成的,可以共享主线程的所有内存数据
Q4:全量复制和增量复制的区别
-
全量复制:将主节点中的所有数据都发送给从节点。当数据量过大时,会造成很大网络开销
-
增量复制:在复制阶段,master每将一个命令发送给slave时,都会将命令存入积压队列中,并记录当前积压队列存放的命令的偏移量范围;slave在收到master命令时,会记录下该命令的偏移量;