Redis的持久化策略

如何保证Redis宕机之后重启可以将数据进行恢复?一般需要定时进行持久化将内存中的数据写入到硬盘中。Redis支持两种不同的持久化机制:RDB持久化以及AOF持久化。

RDB持久化(全量备份)

RDB持久化是指在指定时间间隔内将内存中的数据集快照写入磁盘。实际上fork子线程,先将数据集写入临时文件,写入成功后,在替换之前的文件,用二进制压缩文件,RDB是Redis默认的持久化方式,会在对应目录下生产一个dump.rdb文件,重启会通过加载dump.rdb文件恢复数据。

RDB优点:

  1. 方便持久化:只有一个dump.rdb文件;
  2. 容灾性好:一个文件可以保存到安全的磁盘;
  3. 性能好:fork子线程来完成写操作,主线程继续处理命令;
  4. 效率高:如何数据集偏大,RDB启动效率比AOF高

RDB缺点:

  1. 数据安全性低:因为RDB是每隔一段时间进行持久化,可能会造成数据丢失。

  2. 由于RDB是通过fork子线程协助完成数据持久化工作的,因此如果数据集较大时,可能会导致整个服务停止服务几百毫秒,甚至一分钟。

AOF持久化(增量备份)

AOF持久化是以日志的形式记录记录每一个增删操作然后追加到文件中。AOF的出现是为了弥补RDB备份的不足(数据不一致性)。

与RDB持久化相比,AOF的持久化实时性更好。

AOF的备份策略:

Redis的配置文件中存在三种不同的AOF持久化方式:

  • appendfsync always:每次有数据修改发生时都会同步。
  • appendfsync everysec:每秒同步一次
  • appendsync no:让操作系统决定何时进行同步。

AOF优点:

  1. AOF实时性哈好,数据安全性更高;
  2. AOF通过append模式写文件,即使中途服务器宕机,也可以通过redis-check-aof工具解决数据一致性问题。
  3. AOF机制的rewrite模式(文件过大会对命令进行合并重写),可以删除其中某些命令(比如误操作的命令)

AOF缺点:

  1. AOF文件比RDB文件大,且恢复慢;
  2. 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。

推荐阅读

Redis的持久化机制,你需要了解下

Redis专题

历史文章

mybatis&&数据库优化&&缓存目录
JAVA && Spring && SpringBoot2.x 目录

你可能感兴趣的:(Redis的持久化策略)