一.概述
Redis是内存数据库,一旦服务器进程退出,服务器中的数据库内存数据状态也会消失。为了解决这个问题,Redis提供了RDB 持久化功能,这个功能可以将redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。
RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,是在指定的时间间隔,对你的数据进行快照存储。该RDB文件快照是一个经过压缩的二进制文件。文件名为dump.rdb,该文件保存在redis目录下,当redis服务器停机后,只要RDB文件存在,下次重启Redis服务时就会自动还原数据库数据状态。
1.1 RDB文件的创建
通过Redis两个命令来生成RDB文件,一是SAVE,另一个是BGSAVE。SAVE命令是会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在阻塞期间,服务器不能处理任何命令请求。
127.0.0.1:6379> save -- 等待RDB文件创建完毕 OK
与SAVE不同,BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求。当BGSAVE命令在执行期间,客户端再发送BGSAVE命令会被服务器拒绝,因为同时执行两个GBSAVE命令也会产生竞争条件。最后BGREWRITEAOF和GBSAVE两个命令也不能同时执行。
127.0.0.1:6379> bgsave --派生子进程,并由子进程创建RDB文件 Background saving started
1.2 RDB文件载入
和创建文件不同,RDB文件的载入是在服务器启动时自动执行的,并没有用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件的存在,它就会自动载入RDB文件。能过启动时日志记录可以查看。需要注意的是,如果打开了AOF持久化,那么服务器会优先使用AOF文件来还原数据库状态。
1.3 自动间隔性保存
文件的创建除了SAVE和GBSAVE保存RDB 文件,还可以通过配置SAVE选项,让服务器每隔一段时间自动执行一次BGSAVE命令。可以配置SAVE选项设置多个保存条件,只要任意一个条件被满足,服务器就会执行BGSAVE命令。
--默认配置的SAVE选项,保存方式有三种条件,满足任意一种就可以,如下: 127.0.0.1:6379> config get save 1) "save" 2) "900 1 300 10 60 10000"
(1) 服务器在900秒之内,对数据库进行了至少1次修改。
(2) 服务器在300秒之内,对数据库进行了至少10次修改。
(3) 服务器在60秒之内,对数据库进行了至少10000次修改。

1.4 检查保存条件是否满足
Redis的服务器周期性操作默认每隔100毫秒就会检查执行一次,用于对正在运行的服务器进行维护,其中一项工作是检查save 选项所设置的保存条件是否已经满足,如果满足就调用BGSAVE命令。
1.5 RDB工作方式
当Redis需要保存dump.rdb文件时,服务器执行以下操作:
(1)Redis调用forks. 同时拥有父进程和子进程。
(2)子进程将数据集写入到一个临时 RDB 文件中。
(3)当子进程完成对新 RDB 文件的写入时,Redis用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
1.6 RDB 文件结构
下面简单了解一下RDB文件结构,这里不再深入了解。下面脚本显示了本机dump.rdb文件的位置。该rdb文件结构中各部分 如下图表格所示:
[root@xuegod64 redis]# pwd /usr/local/redis [root@xuegod64 redis]# ls -l -rwxrwxrwx 1 root root 1687 11月 22 10:03 dump.rdb
| 文件结构各部份 | 描述 | 
| redis | RDB文件最开头是REDIS部分,保存五个字符,程序在载入文件时,快速检查所载入的文件是否是RDB文件 
                    50000+
                     5万行代码练就真实本领 
                    17年
                     创办于2008年老牌培训机构 
                    1000+
                     合作企业 
                    98%
                     就业率 | 

