了解redis中RDB结构_动力节点Java学院整理
发布时间 - 2026-01-11 03:00:44 点击率:次RDB文件是在redis的“快照”的模式下才会产生,那么如果我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中有数呢???

一、RDB结构剖析
首先呢,我们要对RDB文件有一个概念性的认识,比如下面画的图一样:
从图中,我们大概看到了RDB文件的一个简要的存储模式,但为了更好的方便对照,我准备save一个empty database,对比一下看看效果:
然后我们用winHex打开dump.rdb文件,看看它的16进制。
好了,该打开的我都打开了,下面我们一一来比较一下。
1. Redis参数: 可以看到在16进制的前5个字节中,是“REDIS"五个大字母,这个的作用显而易见,肯定就是判断当前的文件是否为“RDB文件“,这样才方便用常量的时间来判别。。。
2. db_version: 在Redis字符之后,我们看到了占用4个字节的0006,这个就是RDB文件结构图中的 db_version。对吧,同样也很简单,就是判断当前Redis的版本号,对否???
3. database: 由于我演示的是一个empty database,自然没有相应的结构,等下我们再插入记录,再对比一下。
4. EOF: 从winHex上面你是否看到了,它占用一个字节的空间,就是一个“y”上面加了两点,由于用unicode无法表示,所以出现了这么个乱码,当然16进制可以标识,就是所谓的“FF”,看到了没有??? 那么它的作用就是标识database的结束。
5. checksum: 从名字上你就可以看得到,它就是一个校验和,原理当然就是看文件是否损坏,或者是否被修改,这样有点像现在的OAuth验证,对吧,它占用了8个字节,也就是最后的:DC B3 43 F0 5A DC F2 56。。。
二、带数据的RDB文件结构演示
好了,上面我已经演示了除Database之外的所有参数,下面我们来set一个最简单的string类型,看看database结构是否如图所示。
用WinHex打开dump.rdb文件如下:
为了方便对照,我在图中标记了一下Database开始的位置,也就是十六进制的 FE。。。
1. database [selectDB]: 可以看到,selectDB其实就是一个无法用unicode标记出来的一个字节,十六进制就是FE,当redis碰到这个字符的时候就知道自己该干嘛了。。。。要准备执行select命令了。。。
2. database[db_number]: 在FE之后,我们看到了十六进制的 ”03“,也就是切换到第三个数据库中,还记得吗? 我之前在set数据的时候,曾今执行过select 3,也就是将数据set到第3号数据库中,如果你忘记了,没关系,我用redis客户端打开给你看~~
3. database[pairs][type]: 当你知道select哪一号数据库之后,接下来的操作就是怎么去分析key,value数据了,在key/value数据中,第一个就是type,其实这个type就是你的value的encoding类型,可以看到在winHex中表示的0,也就是以下的源码:
4.database[pairs][key][len]: 在type之后,就是所谓的key,而key的组合模式是【len,value】,其中len就是key的长度,你也可以看到,winHex中表示的是 “04”,也就是说name的长度为4。对吧。。。
5.database[pairs][key][value] 同样的道理,这里的模式也是【len,value】,前面为value的length,后面为value的具体值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# redis
# RDB结构
# Redis 彻底禁用RDB持久化操作
# 浅谈Redis中的RDB快照
# Redis 通过 RDB 方式进行数据备份与还原的方法
# Redis持久化RDB和AOF区别详解
# Redis打开rdb文件常用方法详解
# redis学习之RDB、AOF与复制时对过期键的处理教程
# Redis两种持久化方案RDB和AOF详解
# Redis RDB技术底层原理详解
# 可以看到
# 看到了
# 的是
# 图中
# 对吧
# 好了
# 是一个
# 如果你
# 是在
# 我在
# 第一个
# 让我们
# 我都
# 你也
# 才会
# 当你
# 心中有数
# 也很
# 我用
# 用了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Angular 表单中正确绑定输入值以确保提交与验证正常工作
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何用低价快速搭建高质量网站?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
SQL查询语句优化的实用方法总结
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何在云虚拟主机上快速搭建个人网站?
Laravel如何记录自定义日志?(Log频道配置)
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel如何创建自定义Facades?(详细步骤)
如何在阿里云虚拟主机上快速搭建个人网站?
如何快速上传建站程序避免常见错误?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel如何实现事件和监听器?(Event & Listener实战)
如何快速查询网站的真实建站时间?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
在线制作视频的网站有哪些,电脑如何制作视频短片?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
JavaScript模板引擎Template.js使用详解
如何在云主机上快速搭建多站点网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
使用C语言编写圣诞表白程序
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何处理CORS跨域请求?(配置示例)
Android Socket接口实现即时通讯实例代码
Android利用动画实现背景逐渐变暗
教学论文网站制作软件有哪些,写论文用什么软件
?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
JS去除重复并统计数量的实现方法
免费网站制作appp,免费制作app哪个平台好?
Laravel如何实现用户密码重置功能?(完整流程代码)
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel中的withCount方法怎么高效统计关联模型数量

