一、概述

1、官网介绍

Redis7 数据持久化RDB_子进程

2、是什么

在指定时间间隔,执行数据集的时间点快照

实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。
这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。
这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。

3、能干嘛

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot内存快照
它恢复时再将硬盘快照文件直接读回到内存里

redis的数据都在内存中,保留备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中,一锅端

rdb保存的是dump.rdb文件


二、案例演示

需求说明

Redis7 数据持久化RDB_子进程_02

配置文件(6 vs 7)

redis6.0.16以下

Redis7 数据持久化RDB_子进程_03

redis6.2以及redis7.0.0

Redis7 数据持久化RDB_子进程_04

操作步骤

自动触发

redis7版本,按照redis.conf里配置的save <seconds> <changes>

Redis7 数据持久化RDB_redis_05

本次案例5秒2次修改

Redis7 数据持久化RDB_redis_06

修改dump文件保存路径

Redis7 数据持久化RDB_子进程_07

修改dump文件名称

Redis7 数据持久化RDB_redis_08

触发备份

第一种情况

Redis7 数据持久化RDB_子进程_09

第二种情况

Redis7 数据持久化RDB_redis_10

如何恢复

将备份文件(dump.rdb)移动到redis安装目录并启动服务即可
备份成功后故意用flushdb情况redis,看看是否可以恢复数据

执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义

物理恢复,一定服务和备份分机隔离

Redis7 数据持久化RDB_子进程_11

手动触发

save和bgsave
redis提供了两个命令来生成RDB文件,分别是save个bgsave

Save 
在主程序中执行会阻塞当前redis服务器,直到持久化工作完成,执行save命令期间,redis不能处理其他命令,线上禁止使用

Redis7 数据持久化RDB_数据_12

BGSAVE(默认)
redis会在后台异步进行快照操作,不阻塞
快照同时还可以响应客户端情况,该触发方式会fork一个子进程由子进程复制持久化过程

官网说明
redis会使用bgsave对当前内存中的所有数据做快照
这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据

fork是什么
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,尽量避免膨胀。

Redis7 数据持久化RDB_redis_13

Redis7 数据持久化RDB_子进程_14

LASTSAVE
可以通过lastsave命令获取最后一次成功执行快照的时间

Redis7 数据持久化RDB_数据_15

三、优势和劣势

优势

Redis7 数据持久化RDB_redis_16

适合大规模的数据恢复
按照业务定时备份
对数据完整性和一致性要求不高
RDB文件在内存中的加载速度要比AOF快得多

劣势

Redis7 数据持久化RDB_子进程_17

在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失
内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能
RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟
fork的时候内存中的数据呗克隆了一份,大致2倍的膨胀性,需要考虑

数据丢失案例
正常录入数据
kill -9故意模拟意外down掉
redis重启恢复,查看数据是否丢失

Redis7 数据持久化RDB_redis_18

四、检查修复dump.rdb

Redis7 数据持久化RDB_redis_19

五、触发RDB快照

配置文件中默认的快照配置
手动save/bgsave命令
执行flushall/flushdb命令也会产生dump.rdb,但里面是空的,无意义
执行shutdown或者kill(不是kill -9)且没有设置开启AOF持久化
主从复制时,主节点自动触发

六、禁用快照

动态所有停止RDB保存规则的方法

redis-cli config set save ""

快照禁用

Redis7 数据持久化RDB_子进程_20

七、RDB优化配置项

配置文件SNAPSHOTTING模块

save <seconds> <changes>

dbfilename

dir

stop-writes-on-bgsave-error

Redis7 数据持久化RDB_子进程_21

rdbcompression

Redis7 数据持久化RDB_子进程_22

rdbchecksum

Redis7 数据持久化RDB_数据_23

rdb-del-sync-files

Redis7 数据持久化RDB_子进程_24

八、总结

Redis7 数据持久化RDB_redis_25