文章目录

  • 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持久化相关推荐

  1. 【Redis 高级】- 持久化 - RDB

    [Redis 高级]- 持久化 - RDB

  2. 【赵强老师】Redis的RDB持久化

    先看视频. [赵强老师]Redis的RDB持久化 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集 ...

  3. redis stream持久化_一文了解:Redis的RDB持久化

    一文了解:Redis的RDB持久化 Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上. Redis持久化有两种方式:一种是快照,全量备份.一种是AOF方式,连续增 ...

  4. redis的rdb持久化的cow技术(写时复制)及fork子进程理解

    2022-01-01 把当前进程数据生成快照(.rdb)文件保存到磁盘的过程 两种触发方式:手动触发(save命令),自动触发(bgsave命令,推荐) save命令:阻塞当前redis直到rdb持久 ...

  5. 看完这篇还不懂Redis的RDB持久化,你们来打我!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.为什么需要持久化 redis里有10gb数据,突然停电或者意外 ...

  6. Redis的RDB持久化和AOF持久化区别

    RDB机制的优势和略施 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘. 也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb ...

  7. 为什么子进程每次执行顺序不一样_看完这篇还不懂Redis的RDB持久化,你来打我...

    推荐观看: Redis缓存穿透的终极解决方案,手写布隆过滤器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com P8架构师串讲:Redis,zookeeper,ka ...

  8. Redis RDB 持久化详解

    来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...

  9. Redis详解(六)------ RDB 持久化

    转自: https://www.cnblogs.com/ysocean/p/9114268.html aof持久化:https://blog.csdn.net/qq_35433716/article/ ...

最新文章

  1. Mac下python初学之Image库(PIL)
  2. Tornado,展示一下模板渲染
  3. 微型计算机广告牌实验报告,微机原理课程设计报告
  4. 无人车版「驾校」在长沙开业,7天24小时营业,无人值守的那种
  5. 中南财经政法大学计算机考研难吗,中南财经政法大学考研难吗(考研难度分析)...
  6. Java桌面程序打包成exe可执行文件
  7. 浏览器打开域名变成localhost_史上最全微信域名防封API原理及实现方案
  8. IsWindow,findwindow
  9. IOS的OC项目下回调函数的定义以及传参
  10. 电工接线模拟仿真软件_VERICUT数控加工仿真软件,最强的数控加工模拟软件,你知道么?...
  11. maftools|TCGA肿瘤突变数据的汇总,分析和可视化
  12. ny225 小明求素数积
  13. Web开发之三:前后端开发任务量分析与比较
  14. 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)...
  15. android怎么监听多点触摸_Android笔记:触摸事件的分析与总结----多点触控
  16. Pygame实战:BOOM 这有一款超刺激的扎气球游戏等你来玩~
  17. postman导出,断言,批量执行
  18. 沈阳城市学院计算机,喜讯:沈阳城市学院21个代表队在2019全国计算机大赛中全部获奖...
  19. 腾讯云DNS 域名服务器(nameservers)修改
  20. 2021招商银行信用卡Mgeeker竞赛

热门文章

  1. Cocos Creator 只谈实战系列—成语游戏篇
  2. PAC技术为曼尼·帕奎奥的粉丝推出限量版数码卡
  3. 吴炳忠:论证的要素与结构
  4. day6-列表和列表习题
  5. UITextView 行间距设置
  6. 【arduino】时间相关函数
  7. android系统开机启动很慢,为什么安卓手机升级系统后,首次启动会比较慢?
  8. Vbs脚本编程简明教程之三
  9. 今天继续去新交房的小区地推
  10. JavaScript:登录页面