redis-RDB持久化
-
RDB持久化
Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。
-
Redis 保存和载入 RDB 文件的流程。
- 有两个Redis命令可以用于生成RDB文件,一个是save,另一个是bgsave
- save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求
- bgsave命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求
- 有两个Redis命令可以用于生成RDB文件,一个是save,另一个是bgsave
![digraph { label = "\n图 10-5 创建和载入 RDB 文件"; rankdir = LR; splines = polyline // node [shape = circle, width = 1.3, height = 1.3]; state [label = "数据库状态"]; rdb [label = "RDB 文件"]; // edge [minlen = 2.5]; state -> rdb [label = "rdbSave"]; rdb -> state [label = "\nrdbLoad"]; }](https://i-blog.csdnimg.cn/blog_migrate/ccf0d530902b7fc36fe1c11839d59353.png)
-
记录了服务器触发自动
BGSAVE条件的saveparams属性。struct redisServer { ... // 保存save配置参数 struct saveparam *saveparams; ... };struct saveparam { // 设定的秒数 time_t seconds; // 规定时间内的修改次数 int changes; };
![digraph { label = "\n图 10-6 服务器状态中的保存条件"; rankdir = LR; node [shape = record]; // redisServer [label = " redisServer | ... | saveparams | ... "]; saveparams [label = " { { saveparams[0] | seconds \n 900 | changes \n 1 } | { saveparams[1] | seconds \n 300 | changes \n 10 } | { saveparams[2] | seconds \n 60 | changes \n 10000 } } "]; // redisServer:saveparams -> saveparams; }](https://i-blog.csdnimg.cn/blog_migrate/40cc378dc3a5bec50fd36c76bf21644b.png)
![digraph { label = "\n图 10-10 RDB 文件结构"; node [shape = record]; rdb [label = " REDIS | db_version | databases | EOF | check_sum "]; }](https://i-blog.csdnimg.cn/blog_migrate/b02f629f1b560fca0b2263e5d2be6360.png)
![digraph { label = "\n图 10-13 RDB 文件中的数据库结构"; node [shape = record]; database [label = " SELECTDB | db_number | key_value_pairs "]; }](https://i-blog.csdnimg.cn/blog_migrate/986277f491eaa421607fe6ef63d34f99.png)
![digraph { label = "\n图 10-16 不带过期时间的键值对"; node [shape = record]; kvp [label = " TYPE | key | value "]; }](https://i-blog.csdnimg.cn/blog_migrate/4be195df51c92f03ab9bb8172ced43cf.png)
1669385059434)]
![digraph { label = "\n图 10-17 带有过期时间的键值对"; node [shape = record]; kvp [label = " EXPIRETIME_MS | ms | TYPE | key | value "]; }](https://i-blog.csdnimg.cn/blog_migrate/46325f7c3fade5ad820b5db1b19bc983.png)
![digraph { label = "\n图 10-7 服务器状态示例"; rankdir = LR; node [shape = record]; // redisServer [label = " redisServer | ... | dirty \n 123 | lastsave \n 1378270800 | ... "]; }](https://i-blog.csdnimg.cn/blog_migrate/a1501f1725d36a4213fbf5c0504e8cd1.png)
1391

被折叠的 条评论
为什么被折叠?



