redis持久化之rdb
- RDB相关配置
- rdb快照的触发条件
- rdb快照过程
- rdb文件结构
- rdb和aof文件的加载顺序
Redis的RDB持久化方式是指将某个时刻的内存数据进行快照,生成.rdb文件可以用于恢复快照时刻redis的内存数据。
RDB相关配置
我们可以在redis.conf中进行rdb相关的配置,具体配置如下
配置 | 说明 |
---|---|
save 600 1 | 距离上次快照过去了600秒且发生了至少一个key的修改就进行rdb快照,如果没有配置这些配置表示关闭 |
stop-writes-on-bgsave-error yes | 快照发生错误停止 |
rdbcompression yes | 开启rdb文件压缩 |
rdbchecksum yes | 使用rdb恢复数据时是否检查rdb文件是否已经损坏 |
dbfilename dump.rdb | 快照文件名 |
下面是redis默认的rdb快照配置
在解析之前介绍几个变量:
- serverCron函数:Redis中周期执行的函数,主要工作是维护redis服务器的的状态,包括检查save配置是否满足
- lastsave:上一次快照的时间
- dirty:一个计数器,记录上次快照后修改的key的数量,每次快照后都会被清零
那么redis是这样判断save 60 1000是否满足:(系统时间 - lastsave)>= 60 && dirty >= 10000
如果判断满足则fork出子进程进行快照,并重置dirty值与lastsave值。
rdb快照的触发条件
- 由配置文件中的save m n自动触发
- 客户端使用save命令或者bgsave命令手动快照
- 关闭redis
- 主从模式中,从节点同步主节点时,主节点会进行快照
- 如果用户定义了自定义快照条件,则执行flushall命令也会触发快照
rdb快照过程
快照有同步和异步两种方式,对应的save和bgsave命令,同步方式会阻塞redis,异步方式通过fork进程方式快照,主进程继续处理客户端请求。
rdb文件结构
了解rdb文件的结构有助于理解redis中的一些配置,如下如是rdb的文件结构
例如配置文件redis.conf中的rdbchecksum配置是否开启rdb文件校验,利用就是rdb文件的check_sum值进行校验。再如我们可以利用rdbcompression配置对rdb文件进行压缩,压缩的就是上图中databases中的内容。