【笔记】《Redis设计与实现》chapter10 RDB持久化
chapter10 RDB持久化
10.1 RDB文件的创建和载入
有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE
SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服务器子进程进行RDB文件的创建
因为AOF文件的耿信频率通常比RDB文件的更新频率高,所以
- 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态
- 只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态
10.2 自动间隔性保存
设置保存条件
服务器会为save选项设置默认条件:
save 900 1
save 300 10
save 60 10000
接着服务器根据save选下昂设置的条件设置服务器状态redisServer结构的saveparams属性:
struct redisServer{
//...
// 记录了保存条件的数组
struct saveparam *saveparams;
//...
};
struct saveparam{
// 秒数
time_t seconds;
// 修改数
int changes;
};
dirty计数器和lastsave属性
struct redisServer{
//...
// 修改计数器
long long dirty;
// 上一次执行保存的时间
time_t lastsave;
//...
};
检查保存条件是否满足
Redis的服务器周期性操作函数serverCron默认每隔100毫秒就会执行一次,该函数用于对正在运行的服务器进行维护,它的其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足的话就执行BGSAVE命令
10.3 RDB文件结构
datebases 部分
TYPE取值
value 的编码
1. 字符串对象
2. 列表对象
3. 集合对象
保存结构和列表对象相似
4. 哈希表对象
5. 有序集合对象
10.4 分析RDB文件
包含带有过期时间的字符串键的RDB文件
包含一个集合键的RDB文件
10.5 重点回顾
【笔记】《Redis设计与实现》chapter10 RDB持久化的更多相关文章
- 《Redis设计与实现》- RDB持久化
Redis RDB持久化功能可以将Redis内存中的数据库状态保存到磁盘里面,避免数据意外丢失. 1. 手动生成 RDB 文件 有两个Redis命令可以用于生成RDB文件: SAVE,该命令会阻塞Re ...
- redis源码分析(三)--rdb持久化
Redis rdb持久化 Redis支持两种持久化方式:rdb与aof.rdb将一个节点上的内存数据序列化后存储到磁盘中,序列化的数据以尽可能节约空间的方式存储,并非完全的ascii表示.它的优点在于 ...
- 《Redis设计与实现》- AOF持久化
1. AOF持久化 Redis AOF 持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的. 2. RDB持久化与AOF持久化的区别 RDB持久化 RDB持久化通过保存数据中的键值对来记 ...
- redis之RDB持久化与AOF持久化
Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Red ...
- Redis设计与实现
简述Redis设计与实现 Redis是一个高性能的key-value的非关系型数据库,Redis是运行在内存中的一种数据库,但是它也可以持久化到磁盘中,Redis的实现有着更为复杂的数据结构并且提供对 ...
- redis 笔记03 RDB 持久化、AOF持久化、事件、客户端
RDB 持久化 1. RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据. 2. SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器. 3. BGSAVE由子进程执行保 ...
- Redis学习笔记(八) RDB持久化
Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘,那么服务器 进程一旦退出,服务器中的数据库状态也会消失不见. 为了解决这个问题,Red ...
- [redis读书笔记] 第二部分 单机数据库 RDB持久化
内存中的rdb是会存为文件以做到RDB持久化的.RDB文件时一个二进制文件. 一 载入与存储 文件的载入是在server启动时进行的(rdbload()),因为AOF的更新频率比RDB高,所以如果AO ...
- 《Redis设计与实现》读书笔记
<Redis设计与实现>读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作: 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少: 阅 ...
随机推荐
- 生成类库项目时同时生成的pdb文件是什么东东?
英文全称:Program Database File Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.可以对程序的调试配置进行增量链接.Release 里的PDB是p ...
- JAVA 批量下载服务器文件到本地指定文件夹并重命名
/** * @功能 下载文件到指定文件夹并重命名 * @param url 请求的路径 * @param filePath 文件将要保存的目录 * @param filename 保存到本地的文件名 ...
- DisplayFormat属性
DataFormatString="{0:格式字符串}" 在DataFormatString 中的 {0} 表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式: 数字 ...
- Mysql通过binlog恢复误update的数据
事件: 在生产库执行update时只添加了STATUS(状态)条件,将所有状态为'E'的数据全部改为了'D' 思路: 操作步骤主要参考自文章:https://blog.csdn.net/weixin_ ...
- springboot启动抛出javax.websocket.server.ServerContainer not available
问题描述:spring boot接入websocket时,启动报错:javax.websocket.server.ServerContainer not available <dependenc ...
- nginx+php-fpm docker镜像合二为一
一.概述 在上一篇文章介绍了nginx+php-fpm,链接如下: https://www.cnblogs.com/xiao987334176/p/12918413.html nginx和php-fp ...
- Morris莫里斯遍历
程序员代码面试指南(第2版)第3章 二叉树问题:遍历二叉树的神级方法 https://leetcode.com/articles/binary-tree-inorder-traversal/ Step ...
- 《从零开始TypeScript》系列 - 基础数据类型
TypeScript 是 JavaScript 的超集,这里我们只讨论两者中的不同的部分,或者需要注意的部分 数组 Array:在TypeScript中,有两种方式来定义一个数组: 在元素类型后面接上 ...
- 【python+selenium的web自动化】- Selenium WebDriver原理及安装
简单介绍 selenium selenium是一个用于测试web网页的自动化测试工具,它直接运行在浏览器中,模拟用户的操作.
- MySQL 40题练习题和答案
2.查询"生物"课程比"物理"课程成绩高的所有学生的学号: 思路: 获取所有有生物课程的人(学号,成绩) - 临时表 获取所有有物理课程的人(学号, ...