【redis】redis的数据同步机制

redis 与 memcache比较

redis提供持久化


持久化的两种方式 =》 dump.rdb
1、客户端使用BGSAVE或者SAVE手动保存到数据文件中,避免使用
2、配置文件中配置了一定时间内有多少key被修改了则自动进行RDB持久化

AOF:文件追加写命令持久化
即在发生写命令时追加命令到AOF文件中,可配置是否开启

REDIS主从复制

机制1-master同步所有slave
机制2-master同步到一部分slave,然后该slave再同步到其它slave

全量同步:

服务器重启,redis2.8之前的版本短线重连会发生全量同步,同步过程:
1、slave发送SYNC命令给master,master通过BGSAVE启动一个子进程将当前数据快照写到一个快照文件,同时使用一个缓冲区保存这段时间所有的写请求,这时如果有请求到该slave,可通过配置是否用旧数据响应客户端或者直接报错。另外如果有多个slave发送SYNC给master,也只会执行一次BGSAVE
2、子进程完成快照文件写入,给slave发送该文件,slave接收后清空旧数据开始载入,这段时间会阻塞客户端请求
3、master将缓冲区的写命令内容发送给slave,slave载入第二步的快照文件后可以接收客户端的请求,并同时执行master发送来的写命令
4、之后进入增量同步过程;

增量同步:

master每接收一个写命令并执行后都会同步给其它slave执行

部分同步PSYNC:

redis2.8版本后,slave与master断线重连后,默认使用PSYNC同步方法,命令格式:
run_id:用于记录master的身份
offset:偏移量,用于记录slave短线时最后一次接收命令的数据版本

master会根据复制挤压缓冲区内是否有该偏移量的记录来同步数据给slave,如果偏移量超出了缓冲区的大小,则需要执行全量同步


REDIS符合CP协议
REDIS主从同步是符合AP协议的

CAP理论
分布式系统不能同时满足CP和AP
CP:Consistency partition一致性 (zookeeper)
AP:Availability partition可用性 (eureka)