第二部分之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文件结构
第二部分之RDB持久化(第十章)的更多相关文章
- 第二部分之AOF持久化(第十一章)
AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的.被写入AOF文件的所有命令都是以Redis的命令请求协议格式(纯文本)保存的. 一,AOF持久化的实现 1.命令追加 当AOF持 ...
- 第二部分之Redis服务器(第十四章)
Redis服务器复制和多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据. 一,命令请求的执行过程 客户端向服务器发送命令请求 set key value 服务 ...
- [redis读书笔记] 第二部分 单机数据库 RDB持久化
内存中的rdb是会存为文件以做到RDB持久化的.RDB文件时一个二进制文件. 一 载入与存储 文件的载入是在server启动时进行的(rdbload()),因为AOF的更新频率比RDB高,所以如果AO ...
- 页面制作部分之PS切图
页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面 ...
- Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629598 前言:上篇中介绍O ...
- Redis详解(六)------ RDB 持久化
前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,has ...
- 使用AOF持久化文件实现还原Redis数据库并得到RDB持久化文件
目录 1 编写本文的初衷 2 具体实施 2.1 Redis持久化概念简介 2.2 获取指定Redis的AOF持久化文件 2.3 把Redis的持久化AOF文件转换为RDB文件 1 编写本文的初衷 因为 ...
- Redis实现之RDB持久化(二)
RDB文件结构 在Redis实现之RDB持久化(一)这一章中,我们介绍了Redis服务器保存和载入RDB文件的方法,在这一节,我们将对RDB文件本身进行介绍,并详细说明文件各个部分的结构和意义.图1- ...
- Redis实现之RDB持久化(一)
RDB持久化 Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态 ...
随机推荐
- JS闭包作用域解析
什么是闭包? 简单理解,当在一个函数的外部访问函数内部定义的变量的时候就会形成一个闭包,由这个理解可以知道,当一个函数执行完成的时候,一般情况下,其作用域会被销毁,其内部定义的变量也会变得不可访问,所 ...
- Linux命令行对文件某(些)行的提取
[一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat ...
- 2019/1.6 Javascript Cookie
cookie 就是一个1存放数据的东西,存储量很小(只有4KB),存放在客户端和应用设备上. 应用场景 用户注册,用户登录,购物车 chrome浏览器计算机存放cookie的位置 C:\Users\A ...
- vs2013中集成Git
一:为什么不用2013中自带的? 我的2013自带的没法用,连最基本的克隆都用不了,网上看着下 好像说都不能用:不知道各位的如何. 二:如何自己讲Git集成到vs2013中? 需要的工具: ...
- Android 的 so 文件加载机制
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 最近碰到一些 so 文件问题,顺便将相关知识点梳理一下. 提问 本文的结论是跟着 System.loadlibrary() 一层层源 ...
- react create-react-app 怎么添加sass
一.先上官方文档 https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/RE ...
- 把vux中的@font-face为base64格式的字体信息解码成可用的字体文件
在最近移动端项目中用到了vux,感觉用着还习惯,当把vux使用到PC端的时候出现了IE浏览器出现,这样的错误信息: CSS3114: @font-face 未能完成 OpenType 嵌入权限检查.权 ...
- iOS----------禁止输入汉字
说明: ^.*[\u4e00-\u9fa5].*$ 是否包含中文^[\u4E00-\u9FA5]+$ 是否全中文 - (BOOL)textField:(UITextField *)textField ...
- leetcode-48.旋转图像
leetcode-48.旋转图像 point: 数组 题意 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维 ...
- Ubuntu上更改MySQL数据库数据存储目录
之前写过一篇博客"MySQL更改数据库数据存储目录",当时的测试环境是RHEL和CentOS,谁想最近在Ubuntu下面更改MySQL数据库数据存储目录时遇到了之前未遇到的问题,之 ...