redis持久化方式:
-
RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。
-
AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销,所以很快,有点像Mysql中的binlog。
RDB更适合做冷备份,AOF更适合做热备份
两种机制全部开启的时候,redis在重启的时候会默认使用AOF去重新构建数据,因为AOF的数据是比RDB更完整的。
RDB:
优点:
同步数据使用fork子进程,对外提供读取能力,对性能影响小,恢复数据快
缺点:
备份间隔时间大,发生丢失数据影响大,备份快照文件太大会造成暂停,对本身性能影响
AOF:
优点:
可以更好的保护数据不丢失,日志文件以append-only模式写入(以追加的方式记录所有写操作的命令到磁盘文件里面),写入效率高
缺点:
日志文件通常比RDB数据快照文件更大,支持的写QPS会比RDB支持的写QPS低
主从数据同步
启动一台slave 的时候,他会发送一个psync命令给master ,如果是这个slave第一次连接到master,他会触发一个全量复制。master就会启动一个线程,生成RDB快照,还会把新的写请求都缓存在内存中,RDB文件生成后,master会将这个RDB发送给slave。
时间差会导致数据出现缺失使用命令传播+增量复制
命令传播:
Master节点每处理完一个命令都会把命令广播给所有的子节点,而每个子节点接收到Master的广播过来的命令后,会在处理完之后继续广播给自己的子节点。Master节点处理完客户端的命令之后会立马向客户端返回结果,而不会一直等待所有的子节点都确认完成操作后再返回以保证Redis高效的性能
增量复制:
每次处理完命令之后,先写入缓冲区repl_backlog, 然后再发送给子节点。这就是增量复制(也叫部分复制)。但是缓冲区能保存的命令有限,只能至多保存的命令长度为repl_backlog_length,如果某个子节点落后当前最新命令的长度大于了repl_backlog_length,那么就会触发全量复制。
应用别人的图片