RDB
RDB是什么?
Redis持久化数据的两种方式之一,
另外一种是AOF。
Redis会定期保存数据快照至一个rbd文件中,
并在启动时自动加载rdb文件,
恢复之前保存的数据。
RDB 触发时机
- 手动触发
可以通过
SAVE或者BGSAVE进行RDB备份
- SAVE
直接调用 rdbSave ,
阻塞 Redis 主进程,
直到保存完成为止。
在主进程阻塞期间,
服务器不能处理客户端的任何请求。
- BGSAVE
fork 出一个子进程,
子进程负责调用 rdbSave ,
并在保存完成之后向主进程发送信号,
通知保存已完成。
Redis 服务器在BGSAVE 执行期间,
仍然可以继续处理客户端的请求。
- 自动触发
可以在Redis的配置文件中进行设置,
以达到满足条件自动触发RDB备份。
- 配置方式
在配置文件中加上
save 60 1000 ,
则表示 60秒内如果数据变更达到1000次,
则满足触发RDB备份的条件。
配置方式可以加入多条,
满足任意条件,
则触发RDB备份
RDB的优缺点
- 优点
- 对性能影响最小,
Redis在保存RDB快照时会fork出子进程进行,
几乎不影响Redis处理客户端请求的效率。
- 恢复数据的速度快,
相对于AOF,具有更快的数据恢复速度。
- 适合数据库容灾备份,
生产的RDB文件可以移动到一些高可靠的文件系统,
比如HDFS。
- 缺点
- 不适合频繁触发备份,
所以没有备份的数据在宕机的时候会丢失。
- Redis如果存储的数据体量太大,
Fork子进程的时候会影响到Redis的可用性
- 二进制文件,
无法人工读懂,
不能直接进行人工干预。
与其说优缺点,
我们其实不如思考适用场景,
没有完美的技术,
只要用到合适的场景,
他就是对的。
RDB文件生产过程
- Redis fork 一个子进程
- 子进程将数据写入一个临时的RDB文件
- 当子进程完成对临时的RDB文件的写入,
将完成的RDB文件来覆盖 旧的RDB文件
这样就完成了一次RDB的备份,
并且不会因为备份失败而影响到之前的备份数据。