持久化

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