Redis持久化与同步
持久化
redis 持久化有两种方式,RDB与AOF。
RDB
优点:
- 利于备份
- 适用于故障恢复
- 比AOF重启更快
缺点:
- 备份会造成更大的数据损失
- 需要使用fork子进程来持久化数据到盘上,如果数据量较大,会造成同步期间短暂的停止服务。
AOF
优点:
- 持久化做的更好,可以选择三种同步策略,不同步、一秒同步一次,每次更新同步一次。默认策略是每秒同步一次,而且性能也很优秀,但是仍会造成一秒的数据损失。
- AOF 的日志是append only log, 没有seek操作,在电力故障的时候不会发生文件损坏。就算最后一条命令只写入一般,redis检查工具也可以对其进行修复。
缺点:
- AOF文件通常比RDB文件大的多
- 就算AOF每秒同步一次写,其性能损耗仍然不小。
日志重写:
在日志量较大的情况下,AOF数据载入的性能较低,使用日志重写,可以将历史上对一条key的所有操作替换成一条操作。
redis数据库在进行AOF日志重写期间仍可以继续处理命令请求,而新的命令可能对现有的数据进行修改,这可能造成当前数据库的数据和重写后的数据不一致。为解决这个问题,redis增加了一个AOF重写缓存,redis服务器在执行完写命令之后,会同时将这个写命令追加到AOF缓冲区和AOF重写缓冲区。
同步
旧版复制
- 同步sync :将从数据库中的数据库状态更新至主服务器当前所处的数据库状态。
- 命令传播:主库出现写命令导致主从不一致时,发送写命令给从库
- 如果网络断开一段时间,需要重新同步,库较大时会导致耗时较长
新版复制
- psync:分为完整重同步和部分重同步
- 完整重同步跟同步sync一样
- 部分重同步,主服务器和从服务器各维护一个offset,根据偏移量,从服务器与主服务器重连之后不必
cluster
- Author: kunpeng
- Link: https://kunpengdai.github.io/post/2019/redis%E6%8C%81%E4%B9%85%E5%8C%96%E4%B8%8E%E5%90%8C%E6%AD%A5/
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.