如何保证Redis宕机之后重启可以将数据进行恢复?一般需要定时进行持久化将内存中的数据写入到硬盘中。Redis支持两种不同的持久化机制:RDB持久化以及AOF持久化。
RDB持久化(全量备份)
RDB持久化是指在指定时间间隔内将内存中的数据集快照写入磁盘。实际上fork子线程,先将数据集写入临时文件,写入成功后,在替换之前的文件,用二进制压缩文件,RDB是Redis默认的持久化方式,会在对应目录下生产一个dump.rdb文件,重启会通过加载dump.rdb文件恢复数据。
RDB优点:
- 方便持久化:只有一个dump.rdb文件;
- 容灾性好:一个文件可以保存到安全的磁盘;
- 性能好:fork子线程来完成写操作,主线程继续处理命令;
- 效率高:如何数据集偏大,RDB启动效率比AOF高
RDB缺点:
数据安全性低:因为RDB是每隔一段时间进行持久化,可能会造成数据丢失。
由于RDB是通过fork子线程协助完成数据持久化工作的,因此如果数据集较大时,可能会导致整个服务停止服务几百毫秒,甚至一分钟。
AOF持久化(增量备份)
AOF持久化是以日志的形式记录记录每一个增删操作然后追加到文件中。AOF的出现是为了弥补RDB备份的不足(数据不一致性)。
与RDB持久化相比,AOF的持久化实时性更好。
AOF的备份策略:
Redis的配置文件中存在三种不同的AOF持久化方式:
- appendfsync always:每次有数据修改发生时都会同步。
- appendfsync everysec:每秒同步一次
- appendsync no:让操作系统决定何时进行同步。
AOF优点:
- AOF实时性哈好,数据安全性更高;
- AOF通过append模式写文件,即使中途服务器宕机,也可以通过
redis-check-aof
工具解决数据一致性问题。 - AOF机制的rewrite模式(文件过大会对命令进行合并重写),可以删除其中某些命令(比如误操作的命令)
AOF缺点:
- AOF文件比RDB文件大,且恢复慢;
- 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。
推荐阅读
历史文章
mybatis&&数据库优化&&缓存目录
JAVA && Spring && SpringBoot2.x 目录