内存中的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. Ubuntu 19.10 安装 jupyter

    安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...

  2. python中end=''

    end = ''  用于连接下一条的print输出内容 效果图: 代码: # end='' 用于连接下一条输出语句 print('哈哈哈') print('嘻嘻嘻') print('\n\n') pr ...

  3. VMware Workstation CentOS7 Linux 学习之路(4)--守护服务(Supervisor)

    目前存在三个问题 问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生 ...

  4. vue学习笔记1:el 与 data

    一.vue介绍 vue是目前三大主流框架之一(React.Angular.Vue) vue特点: 易用 灵活 高效 vue官网:官网链接 二,知识点 vue实例选项: el 注:不能 让el直接管理h ...

  5. 调试 ambari-server 总结

    刚开始debug ambari-server的时候,很多逻辑都是第一次接触.其中有很多知识点还是记录一下的好,做个备忘.这些知识点对于自定义api的开发还是很有作用的. 1. api的子href的最后 ...

  6. printf 函数笔记

    函数声明 int printf (const char*, ...); 说明 <返回值> printf ("<格式化字符串>", <参数表>); ...

  7. AI初探

    看东西应该记笔记,不然如过眼云烟,如只逛商场,不买东西,不留下带走什么,就是浪费时间,没有收获,仅此开始,定期梳理看过的东西. 人工智能的目的是什么呢? 答:让机器表现得更像人类,甚至在某些技能上超越 ...

  8. BERT模型总结

    BERT模型总结 前言 ​ BERT是在Google论文<BERT: Pre-training of Deep Bidirectional Transformers for Language U ...

  9. Java8新特性一点通 | 回顾功能接口Functional Interface

    Functional Interface Functional Interface是什么? 功能接口是java 8中的新增功能,它们只允许一个抽象方法.这些接口也称为单抽象方法接口(SAM接口).这些 ...

  10. 线程安全之 synchronized 和 ReentrantLock

    线程安全之 synchronized 和 ReentrantLock + 面试题 前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题.线程安全问题指的是在 ...