返回顶部
首页 > 资讯 > 数据库 >了解redis中RDB结构_动力节点Java学院整理
  • 217
分享到

了解redis中RDB结构_动力节点Java学院整理

节点结构动力 2022-06-04 17:06:29 217人浏览 八月长安
摘要

RDB文件是在Redis的“快照”的模式下才会产生,那么如果我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中有数呢??? 一、RDB结构剖析   首先呢,我们要对RDB文件有一个概念性的

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的具体值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

您可能感兴趣的文档:

--结束END--

本文标题: 了解redis中RDB结构_动力节点Java学院整理

本文链接: https://lsjlt.com/news/11829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 了解redis中RDB结构_动力节点Java学院整理
    RDB文件是在redis的“快照”的模式下才会产生,那么如果我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中有数呢??? 一、RDB结构剖析   首先呢,我们要对RDB文件有一个概念性的...
    99+
    2022-06-04
    节点 结构 动力
  • redis简介_动力节点Java学院整理
    Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。Redis官方网网站是:http://www.redis.io/,如下: Redis 有三个...
    99+
    2022-06-04
    节点 动力 简介
  • redis事务_动力节点Java学院整理
    我们都知道redis追求的是简单,快速,高效,在这种情况下也就拒绝了支持window平台,学sqlserver的时候,我们知道事务还算是个比较复杂的东西,所以这要是照搬到redis中去,理所当然redis就...
    99+
    2022-06-04
    节点 事务 动力
  • Java FileDescriptor总结_动力节点Java学院整理
    FileDescriptor 介绍FileDescriptor 是“文件描述符”。FileDescriptor 可以被用来表示开放文件、开放套接字等。以FileDescriptor表示文件来说:当FileDescriptor表示某文件时,我...
    99+
    2023-05-31
    java filedescriptor ava
  • Java数据结构之队列(动力节点Java学院整理)
    队列的定义:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Front)。(2)允许插入的一端称为队尾(Rear)。(3)当队列中没有元素时称为空队列。(4)队列亦称...
    99+
    2023-05-31
    java 数据结构 队列
  • redis哈希类型_动力节点Java学院整理
    redis中的hash也是我们使用中的高频数据结构,它的构造基本上和编程语言中的HashTable,Dictionary大同小异,如果大家往后有什么逻辑需要用Dictionary存放的话,可以根据场景优先考...
    99+
    2022-06-04
    节点 类型 动力
  • redis集合类型_动力节点Java学院整理
    我们来看看Redis五大类型中的第四大类型:“集合类型”,集合类型还是蛮有意思的,先看redis手册,如下: 上面就是redis中的set类型使用到的所有方法,还是老话,常用的方法也就那么四个(CURD)...
    99+
    2022-06-04
    节点 类型 动力
  • redis发布订阅_动力节点Java学院整理
    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到...
    99+
    2022-06-04
    节点 动力 学院
  • redis列表类型_动力节点Java学院整理
    据说60%的人使用redis看重的是redis中的list类型,那这个list有什么用呢???不用我说大家都明白,做队列使用呗,为什么用它呢,很简单呗,因为有了它我就不需要专门的MQ产品啦,比如说Rabbi...
    99+
    2022-06-04
    节点 类型 动力
  • redis快照模式_动力节点Java学院整理
    我们知道redis是带有持久化这个能力了,那到底持久化成到哪里,持久化成啥样呢???这篇我们一起来寻求答案。 一、快照模式   或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是SN...
    99+
    2022-06-04
    快照 节点 模式
  • redis集群搭建_动力节点Java学院整理
    现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这...
    99+
    2022-06-04
    节点 集群 动力
  • Redis入门教程_动力节点Java学院整理
    Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。 一:Redis是什么?   这个我想怎么总结呢,...
    99+
    2022-06-04
    节点 入门教程 动力
  • redis数据类型_动力节点Java学院整理
    Redis支持5种数据类型,它们描述如下: Strings - 字符串 Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可...
    99+
    2022-06-04
    节点 数据类型 动力
  • Java Collections集合继承结构图_动力节点Java学院整理
    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。集合类的特点...
    99+
    2023-05-31
    java collections 集合类
  • 详解Redis命令和键_动力节点Java学院整理
    Redis命令用于在redis服务器上执行某些操作。 要在Redis服务器上运行的命令,需要一个Redis客户端。 Redis客户端在Redis的包,这已经我们前面安装使用过了。 语法 Redis客户端...
    99+
    2022-06-04
    节点 详解 命令
  • Java中JDom解析XML_动力节点Java学院整理
    一、前言    JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Ja...
    99+
    2023-05-31
    jdom 解析 xml
  • Java死锁_动力节点Java学院整理
    死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。在这里我已写好一个简单的程序,它将会引起死锁方案然后我们就会明白如何分析它。Java死锁范例ThreadDeadlock.javapack...
    99+
    2023-05-31
    java 死锁 ava
  • Java多态(动力节点Java学院整理)
    什么是多态 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象...
    99+
    2023-05-31
    java 多态 ava
  • Sax解析xml_动力节点Java学院整理
    JAVA 解析 XML 通常有两种方式,DOM 和 SAX。DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节...
    99+
    2023-05-31
    java sax 解析
  • Dom4j解析XML_动力节点Java学院整理
    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge...
    99+
    2023-05-31
    dom4j 解析 xml
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作