Redis——RDB持久化

1,Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务其中的数据库状态也会消失不见。RDB持久化功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,这个文件还可以还原成数据库的状态。
2,Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。而BGSAVE则会派生出一个子进程,然后由子进程负责创建RDB文件。RDB文件的载入工作是在服务器启动时自动执行的,Redis并没有专门用于载入RDB文件的命令。
3,由于AOF文件的更新效率通常比RDB文件的更新效率高,所以一旦检测到系统启用了AOF文件,就不会使用RDB文件。
4,Redis可以设置自动间隔保存,设置的保存条件存放在struct saveparam *saveparams结构中。dirty计数器记录距离上一次成功执行SAVE命令或BGSAVE命令之后,服务器对数据库状态进行了多少次修改。
5,下面介绍RDB文件结构
1)RDB文件开头5个字符为“REDIS”,通过这5个字符,程序可以在载入文件时,快速检查所载入的文件是否是RDB文件。
2)db_version这个字段的长度是4字节,它的值是一个字符串表示的整数,这个整数记录了RDB文件的版本号。
3)databases部分包含着零个或任意多个数据库,以及各个数据库中的键值对数据。
每个非空数据库在RDB文件中都可以保存为SELECTDB、db_number、key_value_paires三个部门。
SELECTDB常量的长度为1字节,当读入程序遇到这个值的时候,它知道接下来要读入的将是一个数据库号码
db_number保存着一个数据库号码,这部分的大小由号码的长度决定。
key_value_paires部分保存了数据库中的所有键值对数据。
4)EOF常量的长度是1字节,这个常量标志着RDB文件正文内容的结束。
5)check_sum是一个8字节长的无符号整数,保存着一个检验和,可以通过这个检验和检查RDB文件是否出错。
6,可以使用od命令分析Redis服务器产生的RDB文件。

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/115323400