简单记录Redis的持久化策略。
📝 一、RDB持久化(全量备份)
RDB持久化是指在指定时间间隔内将内存中的数据集快照写入磁盘。实际上fork子线程,先将数据集写入临时文件,写入成功后,在替换之前的文件,用二进制压缩文件,RDB是Redis默认的持久化方式,会在对应目录下生产一个dump.rdb文件,重启会通过加载dump.rdb文件恢复数据。
RDB优点:
- 方便持久化:只有一个dump.rdb文件;
- 容灾性好:一个文件可以保存到安全的磁盘;
- 性能好:fork子线程来完成写操作,主线程继续处理命令;
- 效率高:如何数据集偏大,RDB启动效率比AOF高
RDB缺点:
- 数据安全性低:因为RDB是每隔一段时间进行持久化,可能会造成数据丢失。
- 由于RDB是通过fork子线程协助完成数据持久化工作的,因此如果数据集较大时,可能会导致整个服务停止服务几百毫秒,甚至一分钟。
📝 二、RDB持久化的bgsave命令
Redis提供bgsave命令用来创建RDB文件。当执行bgsave命令时,Redis会在后台异步地执行RDB持久化操作,创建一个RDB文件来备份当前所有数据。这个命令会立即返回,让Redis可以继续处理其他命令。一旦RDB文件创建完成,Redis会更新服务器状态,你可以通过lastsave命令来查看最后一次成功执行RDB持久化的时间。
注意,bgsave命令在Redis主服务器上执行时不会阻塞任何客户端请求,但在从服务器上执行时,会阻塞所有其他客户端请求,直到RDB文件创建完毕。
🤗 三、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。