内存中的rdb是会存为文件以做到RDB持久化的。RDB文件时一个二进制文件。

一 载入与存储

文件的载入是在server启动时进行的(rdbload()),因为AOF的更新频率比RDB高,所以如果AOF持久化功能开启,服务器会优先从AOF还原DB,只有AOF关闭,才从RDB还原数据库。

文件的存储由rdbSave()/rdb.c来实现,SAVE/BGSAVE 命令可以触发,前者直接由Redis server处理,此时不能处理其他命令,后者会启动子进程进行处理,此时server可以处理其他命令,但是,当BGSAVE执行时,SAVE命令就不能再执行了,再次执行BGSAVE也是不行的,最后BGREWRITEAOF也是不能同时和BGSAVE执行的。

二 周期存储

save 900 1

save 300 10

save 60 10000

上面三条命令代表满足条件之一就会触发BGSAVE:

1. 900秒内至少有1次更新

2. 300秒内至少10次更新

3. 60秒内至少有10000次更新

这些时间和更新次数的设置,存储在

struct saveparam {

    // 多少秒之内
time_t seconds; // 发生多少次修改
int changes; };
struct redisserver{
...
struct saveparam *saveparams; /* Save points array for RDB */
...
    // 自从上次 SAVE 执行以来,数据库被修改的次数
long long dirty;                /* Changes to DB from the last save */     // 最后一次完成 SAVE 的时间
time_t lastsave;                /* Unix time of last successful save */ ...
};

上面的dirty,代表上次成功的SAVE/BGSAVE后,对数据库做了多少次的更新。lastsave记录上次成功执行SAVE/BGSAVE的时间。

serverCron()函数会做100ms的周期执行,用saveparams中的值和 dirty以及lastsave比较,来做是否更新RDB的处理。

三 RDB的文件结构

RDB文件是二进制文件,格式自定义,没有太多可说,举例如下:

[redis读书笔记] 第二部分 单机数据库 RDB持久化的更多相关文章

  1. [redis读书笔记] 第二部分 单机数据库 数据库实现

    一 数据库基本实现/命令下发的实现 redis.c里,大家能看到redisCommandTable[] 的实现,列出了支持的所有命令.大部分的入参为redisClient *c,当一条REDIS命令下 ...

  2. Redis学习笔记二:单机数据库的实现

    1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个r ...

  3. [redis读书笔记] 第二部分 集群

    1. 一个集群会包含多个节点(一个节点就是一个reid是服务器),CLUST MEET <ip><port>可以添加一个node到集群,命令执行后,两个node之间就会进行握手 ...

  4. [redis读书笔记] 第二部分 sentinel

    1.sentinel的初始化,会制定master的IP和port,然后sentinel会创建向被监视主服务器的命令连接和订阅连接: -  命令连接是用来和主服务器之间进行命令通信的 - 订阅连接,用于 ...

  5. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  6. [redis读书笔记] 第三部分 多机数据库的实现 复制

    另外一篇写的很好很深入的文章:http://www.tuicool.com/articles/fAnYFb : RDB持久化 http://www.tuicool.com/articles/F3Eri ...

  7. [redis读书笔记] 第一部分 数据结构与对象 简单动态字符串

    本读书笔记主要来自于<<redis设计与实现>> -- 黄键宏(huangz) redis主要设计了字符串,链表,字典,跳跃表,整数集合,压缩列表来做为基本的数据结构,实现键值 ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. Redis学习笔记之多机数据库

    1.复制 完整重同步,从服务器完全复制主服务器的数据,主要通过RDB文件和单条命令传输(套接字连接). 部分重同步,主服务器进行命令传播的时候,不仅会把写命令发送给从服务器,而且还会把写命令放入复制积 ...

随机推荐

  1. 【PCIE-3】---PCIE设备的枚举扫描(经典好文)

    前面两个小节大致总结了下PCIE的基本知识,算是扫盲篇吧.本文主要总结PCIE设备的枚举扫描过程,此部分才是PCIE模块的重点,无论是在BIOS下还是系统驱动下都会用到. 按照国际惯例,先列问题: 1 ...

  2. 自建CDN Xnign产品指标

    Xnign-X1 Xnign-X1 性能参数 参考值 L7 HTTP RPS (128并发请求) 250W QPS L7 HTTP CPS (128并发请求) 110W QPS L7 HTTP RPS ...

  3. session跨域丢失问题

    配置一个 filter package com.psm.filter; import javax.servlet.*; import javax.servlet.http.HttpServletReq ...

  4. Browser Security-同源策略、伪URL的域

    同源策略 同源策略的文档模型 同源策略(Same Origin policy,SOP),也称为单源策略(Single Origin policy),它是一种用于Web浏览器编程语言(如JavaScri ...

  5. java.sql.Date与java.sql.Date区别

    public static void main(String[] args) { java.sql.Date createTime = new java.sql.Date(System.current ...

  6. ubuntu 18.04.1安装hadoop3.1.2

    前提,虚拟机安装 见https://www.cnblogs.com/cxl-blog/p/11363183.html 一.按照https://blog.csdn.net/MastetHuang/art ...

  7. vuex 基本语法

    VUEX 的核心概念 1 .State (常用):2.Getters :3.Mutations(常用):4.Actions :5.Modules: 1.State是唯一的数据源,单一的状态树 cons ...

  8. 从O365中获取users到D365中

    用D365 online可能会遇到这样的问题.  顾客需要获取O365 user的email address 发email使用. 但是又不想给这部分的users licenses. 那我们就可以通过g ...

  9. 使用dlib自带的面向梯度直方图(HOG)和线性分类器方法来检测人脸

    之前使用opencv里面CascadeClassifier(级联分类器)来识别人脸, 下面使用dlib库来实现人脸识别. dlib是一个开源的库,它包含了很多内容有机器学习,图像处理,数值算法等等. ...

  10. 剑指offer--二维数组中查找

    剑指offer--二维数组中查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组 ...