Redis高级——RDB持久化
文章目录
- 1. 基础
- 2. SAVE命令和BGSAVE命令
- 3. 自动间隔性保存
- 4. 自动保存条件
- 5. RDB文件结构
- (1)REDIS
- (2)db_version
- (3)databases
- (4)EOF
- (5)check_num
- 6. 分析RDB文件
1. 基础
RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行.该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态
因为RDB文件是保存在硬盘里面的,所以即使Redis服务器进程退出,甚至运行Redis服务器的计算机停机,但只要RDB文件仍然存在,Redis服务器就可以用它来还原数据库状态
2. SAVE命令和BGSAVE命令
有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。
SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求:
和SAVE命令直接阻塞服务器进程的做法不同,BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求:
和使用SAVE命令或者BGSAVE命令创建RDB文件不同,RDB文件的载入工作是在服务器启动时自动执行的,所以 Redis并没有专门用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件。
以下是我执行save命令后重新启动redis服务控制台打印的信息,可以看到在服务启动的时候回自动加载RDB文件
【注意事项】
因为AOF 文件的更新频率通常比RDB文件的更新频率高,所以:如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF 文件来还原数据
库状态。
只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态。
当SAVE命令执行时,Redis服务器会被阻塞,所以当SAVE命令正在执行时,客户端发送的所有命令请求都会被拒绝。
只有在服务器执行完SAVE命令、重新开始接受命令请求之后,客户端发送的命令才会被处理。
因为BGSAVE命令的保存工作是由子进程执行的,所以在子进程创建RDB文件的过程中,Redis服务器仍然可以继续处理客户端的命令请求,但是,在BGSAVE命令执行期间,服务器处理SAVE、BGSAVE、BGREWRITEAOF三个命令的方式会和平时有所不同。
【注意】
1、bgsave命令执行时,客户端的save命令会被服务器拒绝
2、在bgsave命令执行时,客户端的bgsave也会被拒绝
3、bgrewriteaof和bgsave命令不能同时执行
3. 自动间隔性保存
因为BGSAVE命令可以在不阻塞服务器进程的情况下执行,所以Redis允许用户通过设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令。
用户可以通过save选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令。
下面是redis的配置文件
上面的默认配置描述如下:
只要满足以下三个条件中的任意一个,BGSAVE命令就会被执行:
1:服务器在900秒之内,对数据库进行了至少1次修改
2:服务器在300秒之内,对数据库进行了至少10次修改
3:服务器在60秒之内,对数据库进行了至少10000次修改
如果我们想要有其他设置,可以自定义修改其配置规则
4. 自动保存条件
Redis 的服务器周期性操作函数serverCron默认每隔100毫秒就会执行一次,该函数用于对正在运行的服务器进行维护,它的其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足的话,就执行BGSAVE命令。
5. RDB文件结构
(1)REDIS
RDB文件的最开头是REDIS部分,这个部分的长度为5字节,保存着"REDIS"五个字符。通过这五个字符,程序可以在载人文件时,快速检查所载入的文件是否RDB文件。
(2)db_version
db version长度为4字节,它的值是一个字符串表示的整数,这个整数记录了RDB文件的版本号,比如"0006”就代表RDB文件的版本为第六版。
(3)databases
databases部分包含着零个或任意多个数据库,以及各个数据库中的键值对数据:
(4)EOF
EOF常量的长度为1字节,这个常量标志着RDB文件正文内容的结束,当读入程序遇到这个值的时候,它知道所有数据库的所有键值对都已经载入完毕了。
(5)check_num
check_sum是一个8字节长的无符号整数,保存着一个校验和,这个校验和是程序通过对REDIS、db_version、databases、EOF四个部分的内容进行计算得出的。服务器在载人RDB文件时,会将载入数据所计算出的校验和与check_sum所记录的校验和进行对比,以此来检查RDB文件是否有出错或者损坏的情况出现。
6. 分析RDB文件
我们使用od命令来分析Redis服务器产生的RDB文件,该命令可以用给定的格式转存( dump)并打印输人文件。比如说,给定-c参数可以以ASCII编码的方式打印输入文件,给定–x参数可以以十六进制的方式打印输人文件
Linux od命令用于输出文件内容。
od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
【数据库为空时的rdb文件】
当前是数据状态为空的RDB文件,所以只包括四部分,
1:五个字节的标识位REDIS
2:四个字节的版本号:0006
3:一个字节的EOF常量:377 (ASCII码)
4:八个字节的校验和:334 263 C 360 Z 334 362 V
【执行插入命令后的RDB文件】
其中黄色框内表示是整数0,即数据库0有数据
其中红色框内:
\0 003 msg 005 hello
\0表示的是当前数据的类型,0表示的是字符串
003表示的msg即Key的长度,005表示的是value的长度
msg键,hello表示值
Redis高级——RDB持久化相关推荐
- 【Redis 高级】- 持久化 - RDB
[Redis 高级]- 持久化 - RDB
- 【赵强老师】Redis的RDB持久化
先看视频. [赵强老师]Redis的RDB持久化 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集 ...
- redis stream持久化_一文了解:Redis的RDB持久化
一文了解:Redis的RDB持久化 Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上. Redis持久化有两种方式:一种是快照,全量备份.一种是AOF方式,连续增 ...
- redis的rdb持久化的cow技术(写时复制)及fork子进程理解
2022-01-01 把当前进程数据生成快照(.rdb)文件保存到磁盘的过程 两种触发方式:手动触发(save命令),自动触发(bgsave命令,推荐) save命令:阻塞当前redis直到rdb持久 ...
- 看完这篇还不懂Redis的RDB持久化,你们来打我!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.为什么需要持久化 redis里有10gb数据,突然停电或者意外 ...
- Redis的RDB持久化和AOF持久化区别
RDB机制的优势和略施 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘. 也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb ...
- 为什么子进程每次执行顺序不一样_看完这篇还不懂Redis的RDB持久化,你来打我...
推荐观看: Redis缓存穿透的终极解决方案,手写布隆过滤器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com P8架构师串讲:Redis,zookeeper,ka ...
- Redis RDB 持久化详解
来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...
- Redis详解(六)------ RDB 持久化
转自: https://www.cnblogs.com/ysocean/p/9114268.html aof持久化:https://blog.csdn.net/qq_35433716/article/ ...
最新文章
- Mac下python初学之Image库(PIL)
- Tornado,展示一下模板渲染
- 微型计算机广告牌实验报告,微机原理课程设计报告
- 无人车版「驾校」在长沙开业,7天24小时营业,无人值守的那种
- 中南财经政法大学计算机考研难吗,中南财经政法大学考研难吗(考研难度分析)...
- Java桌面程序打包成exe可执行文件
- 浏览器打开域名变成localhost_史上最全微信域名防封API原理及实现方案
- IsWindow,findwindow
- IOS的OC项目下回调函数的定义以及传参
- 电工接线模拟仿真软件_VERICUT数控加工仿真软件,最强的数控加工模拟软件,你知道么?...
- maftools|TCGA肿瘤突变数据的汇总,分析和可视化
- ny225 小明求素数积
- Web开发之三:前后端开发任务量分析与比较
- 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...
- android怎么监听多点触摸_Android笔记:触摸事件的分析与总结----多点触控
- Pygame实战:BOOM 这有一款超刺激的扎气球游戏等你来玩~
- postman导出,断言,批量执行
- 沈阳城市学院计算机,喜讯:沈阳城市学院21个代表队在2019全国计算机大赛中全部获奖...
- 腾讯云DNS 域名服务器(nameservers)修改
- 2021招商银行信用卡Mgeeker竞赛