第二部分之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是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态 ...
随机推荐
- CentOS 7上安装Docker 1.8
Docker支持运行在以下CentOS版本: CentOS 7.X 安装在二进制兼容的EL7版本如 Scientific Linux也是可能成功的,但是Docker没有测试过并且不官方支持. 此文带你 ...
- demo_3
## 控制器层 需求分析: 访问路径:`/user/reg.do`请求参数:`username=xx&password=xx&&phone=xx&email=xx`请求 ...
- C# 批量删除Word超链接
对于Word文档中包含较多的超链接,如果一个个来删除很花费时间和精力,本篇文章将提供一种可用于批量删除Word中的超链接的方法.这里的超链接可以是页眉页脚处的超链接.正文中的超链接.表格中的超链接.文 ...
- C# 如何添加Excel页眉页脚(图片、文字、奇偶页不同)
简介 我们可以通过代码编程来对Excel工作表实现很多操作,在下面的示例中,将介绍如何来添加Excel页眉.页脚.在页眉处,我们可以添加文字,如公司名称.页码.工作表名.日期等,也可以添加图片,如LO ...
- ueditor笔记
一.ueditor是什么 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. 二.ue ...
- 常用开发环境搭建配置教程(OneStall)
最近想要做一个小东西,用到了下面几个中间件或者环境: Java Tomcat Maven MongoDB ZooKeeper Node 并且恰好碰到腾讯云打折,云主机原价100多一个月,花了30块钱买 ...
- 通过多线程处理提高Redis性能
Redis通常被称为单进程单线程模型. 这不是真的! Redis还运行多个后端线程来执行后端清理工作,例如清理脏数据和关闭文件描述符.在Redis中,主线程负责主要任务,包括但不限于:接收来自客户端的 ...
- 如何搭建一个VUE项目
搭建环境 搭建node环境 下载 1.进入node.js官方网站下载页,点击下图中框出位置,进行下载即可,当前版本为8.9.4,下载网址为:https://nodejs.org/zh-cn/downl ...
- vue + elementUi + upLoadIamge组件 上传文件到阿里云oss
<template> <div class="upLoadIamge"> <el-upload action="https://jsonpl ...
- Numpy数组数据文件的读写
一.引言 读写数据文件的重要性就不必多说了. 二.读取列表形式数据的文件 1.我们写几行CSV格式(列表形式,两值之间逗号隔开)的数据. id,height,age 1,175,20 2,168,18 ...