将Redis中的非空数据库和其中保存的键值对称为数据库状态。RDB持久化即将内存中保存的数据库状态写入到RDB文件中,保存在磁盘上。
10.1 RDB文件的创建与载入
- RDB文件的创建
- SAVE命令:阻塞服务器进程,期间不再处理请求,直到RDB文件创建完毕
- BGSAVE命令:派生一个子进程(fork)负责RDB文件的创建,服务器继续处理请求
- RDB文件的载入
在服务器启动时自动载入,因为AOF文件更新频率更高,所以优先载入AOF文件,只有在AOF持久化功能处于关闭的状态,才会使用RDB文件还原数据库状态,在RDB文件载入期间,会一直处于阻塞状态知直到工作完成。
在服务器执行BGSAVE命令期间,
- 遇到SAVE命令,防止父子进程同时调用rdbSave调用,产生竞争条件,所以会直接拒绝;同样的,也会拒绝BGSAVE命令。
- 遇到BGREWRITERAOF命令(重写AOF),出于性能的考虑,两者不能同时执行,会被延迟到EGSAVE执行完毕才开始执行。
10.2 自动间隔性保存
通过配置服务器的save选项设置自动保存,譬如
save 900 1 //在900秒内,对数据库进行了至少1次修改,即执行BGSAVE命令。
后记:
1.触发RDB快照的时机
- 符合自动保存设置
- 执行save或者bgsave命令
- 执行主从复制操作
- 执行flushall