第二部分之RDB持久化(第十章)
RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。(数据库状态:服务器中的非空数据库以及它们的键值对统称为数据库状态)
一.RDB文件的创建和载入
1.save和bgsave命令可以用来生成RDB文件
save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求
bgsave命令会派生出一个子进程,然后子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求
2.RDB文件的载入
RDB文件的载入工作是在服务器启动的时候自动执行的,只要Redis服务器在启动时检测到RDB文件存在,就会自动载入RDB文件(所以Redis并没有专门用于载入RDB文件的命令)。在服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入完成。
注意:
因为AOF文件的更新频率通常比RDB文件的更新频率高,所以:
如果服务器开启了AOF持久化功能,服务器会优先使用AOF文件来还原数据库状态。只有AOF持久化功能处于关闭时,服务器才会使用RDB文件来还原数据库状态。
2.命令执行时服务器状态
执行save命令时,客户端发送的所有命令请求都会被阻塞。save命令执行完后,客户端命令才会被处理
执行bgsave命令时,子进程创建RDB文件,服务器可以正常处理客户端的命令请求。
注意:执行bgsave命令时,客户端发送的save,bgsave命令会被服务器拒绝,客户端发送的bgrewriteaof命令会被延迟到bgsave命令执行完毕后执行
二,自动间隔性保存
1.配置bgsave保存的条件,redis.conf
save 900 1 服务器在900秒内,对数据库进行了至少一次修改
save 300 10 服务器在300秒内,对数据库进行了至少10次修改
save 60 10000 服务器在60秒内,对数据库进行了至少10000次修改
上面的条件是默认的设置(如果我们不设置 save的值,就按照上面的默认条件)。当服务器启动时,程序会根据save选项设置的保存条件,设置服务器状态redisServer结构的saveparams属性:
struct redisServer{
//记录了保存条件的数组
struct saveparam *saveparams;
}
saveparams属性是一个数组,数组中的每个元素都是一个saveparam结构,每个saveparam结构都保存了一个save选项设置的保存条件:
struct saveparam{
//秒数
time_t seconds;
//修改数
int changes;
}
那怎么让上面的配置条件生效呢?
1.redisServer还维持一个dirty计数器和lastsave属性
dirty计数器记录服务器对数据库状态进行了多少次修改,执行save或bgsave命令后,dirty归零
lastsave属性是一个时间戳,记录服务器上一次成功执行save或bgsave命令的时间
2.服务器周期性操作函数serverCron默认每隔100毫秒执行一次,检查save选项设置的保存条件是否满足。
dirty和changes比较, lastsave-nowtime 和 second比较。只要有一个条件满足,服务器就执行bgsave命令
三,RDB文件结构
最新文章
- 【随笔】从gitHub上获取源码
- python里的del变量无法立刻释放内存的解决办法
- 对react的几点质疑
- java_easyui体系之目录 [转]
- TesCase-GUI(图形用户界面)测试
- java开发--JavaScript
- JavaScript DOM高级程序设计2.1创建可重用的对象--我要坚持到底!
- 三目运算符 改变<;a>;标签的class属性
- Web项目去掉Js文件红叉
- hack:选择符前缀法,样式属性前缀法
- wildfly 如何设置外网访问
- [转]java List和数组相互转换方法
- redis安装及错误排查
- c++函数库中一些实用的函数
- ELK--filebeat nginx模块
- Maven的特点、优点-功能摘要
- Slava and tanks 877C
- JavaScript -- FileSystemObject-文件
- dependencies与dependencyManagement的区(转自:http://blog.csdn.net/liutengteng130/article/details/46991829)
- 87. Scramble String (String; DP)
热门文章
- Smobiler 4.0 正式发布
- Vs Code 插件配置教程
- Java开发笔记(四)Java帝国的度量衡
- CA证书理解?CA证书的作用?
- SVN上传的时候没法显示文件名,只显示后缀名
- 设计模式系列之策略模式(Strategy Pattern)
- asp.net core webapi/website+Azure DevOps+GitHub+Docker
- 容器化系列 - 通过Grafana监测InfluxDB数据 on Docker
- selenium-确认进入了预期页面(四)
- c/c++ 多线程 等待一次性事件 异常处理