精华内容
下载资源
问答
  • RDB
    2019-06-01 18:07:00

    什么是 RDB

    • RDB 文件是在硬盘上的二进制文件;
    • RDB 文件是 Redis 在内存存储的数据在某一时刻的快照;
    • RDB 文件可在 Redis 启动的时候载入;
    • RDB 文件是 Redis 节点复制时的媒介;

    三种主要触发 RDB 的机制

    save 同步命令
    • 生成 RDB 文件,会使客户端的命令排队,
    • 文件策略:如果存在老的 RDB 文件会被替换;
    • 时间复杂度:O(n);
    bgsave 异步命令
    • 调用 Linux 的 fork() 函数创建子进程用于生成 RDB 文件;
    • 文件策略:如果存在老的 RDB 文件会被替换;
    • 时间复杂度:O(n);
    自动触发
    • 在某些条件满足时,自动触发 RDB 文件的生成,以 bgsave 方式,比如:
      • save 60 10000 在 60s 内更新 10000 条数据,触发 RDB;
      • save 300 10 在 300s 内更新 10 条数据,触发 RDB;
      • save 900 1 在 900s 内更新 1 条数据,触发 RDB;
    • 相关命令
      • dbfilename dump.rdb
      • dir ./
      • stop-writes-on-bgsave-error yes
      • rdbcompression yes
      • rdbchecksum yes 采用校验和的方式验证文件的完整性;

    最佳配置

    • 不使用 save 命令设置自动 RDB;
    • dbfilename dump-${port}.rdb 用端口标识文件名;
    • dir /bigdiskpath
    • stop-writes-on-bgsave-error yes
    • rdbcompression yes
    • rdbchecksum yes

    其他触发 RDB 的机制

    • 主从间发生全量复制时会触发 RDB 文件的生成;
    • debug reload 以不清空内存中的数据的方式重启 Redis 时会触发 RDB 文件的生成;
    • shutdown save 时会触发 RDB 文件的生成;
    更多相关内容
  • - RDB持久化机制: - RDB默认开启 - RDB存储二进制数据,RDB在持久化和读取持久化文件时,速度较快 - RDB持久化的时机: save second keys # 在second时间内,执行了key次写操作,就执行RDB的持久化 - 优缺点...
  • redis-rdb-cli 可以解析,过滤,拆分,合并rdb并离线分析内存使用情况的工具。 它还可以同步2个Redis数据,并允许用户定义自己的接收器服务以将Redis数据迁移到某个地方。 与作者聊天 与作者签约 二进制发行 运行时...
  • 备份远程RDB快照 3.3。 备份远程命令 3.4。 将RDB转换为转储格式 3.5。 RDB检查 3.6。 其他例子 4.高级主题 4.1。 命令扩展 4.1.1。 编写命令 4.1.2。 编写命令解析器 4.1.3。 注册此解析器 4.1.4。 处理命令事件 ...
  • 本文主要针对Redis 有两种持久化方案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助大家对这个两种方案有更加深入的理解。 Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果...
  • rdb2graph-关系数据库到属性图的转换器和分析工具 rdb2graph可用于将关系数据库在线转换为属性图模型并将其存储在图数据库中 该工具使用读取关系数据库的架构。 根据表定义和外键约束,创建节点和关系。 如果将链接...
  • redis-rdb-tools, 解析 dump.rdb 文件,分析内存,并将数据导出到 JSON 解析Redis文件,分析内存,并将数据输出到 JSONRdbtools是一个用于 Redis dump.rdb 文件的解析器。 解析器生成类似于sax解析器的事件,并且是...
  • 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。 举个例子,如果数据库中包含三个键k1、k2、k3,并且k2已经过期,...
  • The QorIQ® dual-core T1024 and T1023 and single-core T1014 and T1013 communications processors combine 64-bit cores, built on Power Architecture...T1024RDB revC DSN (PDF).pdf (1.09 MB, 下载次数: 16 )
  • redis的 dump.rdb 文件

    2018-12-11 10:16:27
    dump.rdb---
  • 概述 QorIQ T1040四核和T1020双核通信处理器可...T1040RDB_0116_Reversion_B.rar (492.93 KB, 下载次数: 137 ) T1040RDB_SCH0116.pdf (461.69 KB, 下载次数: 134 ) 处理器 , 防火墙 , 可扩展性 , 路由器 , 软件设计
  • 人民电器RDB5-63系列微型断路器样本pdf,提供“人民电器RDB5-63系列微型断路器样本”下载,资料主要介绍了RDB5-63系列微型断路器的特点、规格参数及外形尺寸,可供选型时参考。
  • MPC837x开发板原理图:MPC837xE-RDB Reference Design REV 1.1 MPC837xE-RDB_Schematic_Rev1.1.pdf (497.65 KB, 下载次数: 286 ) Design , 开发
  • RDB是Redis内存到硬盘的快照,用于redis持久化,创建RDB二进制文件,将存储在内存中的数据,持久化的放到硬盘中,当我们需要这些数据的时候,启动载入RDB文件,数据将会被存入内存中,其实RDB就是一种快照的方式持久...
  • RDB文件是在redis的“快照”的模式下才会产生,那么如果我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中有数呢??? 一、RDB结构剖析  首先呢,我们要对RDB文件有一个概念性的认识,比如下面...
  • 易语言RDB操作类模块

    2020-08-16 01:17:35
    易语言RDB操作类模块源码 系统结构:Ansi转Unicode,Unicode转Ansi,打开RDB自文件,打开RDB自字节集,销毁,合并资源包,取资源包数组,取资源数量,取资源自路径,取资源自索引,取索引自路径,取索引
  • Node.js的ORM框架rdb.zip

    2019-07-19 17:48:41
    rdb 是 Node.js 的一个 ORM 框架,支持 Postgres 和 MySQL 数据库。特点:简单灵活的映射器支持事务处理可定制的持久化策略支持延迟加载基于 promises.示例代码:var rdb = require('rdb'); var Customer =...
  • RDB2RDFMapper-开源

    2021-05-12 22:02:38
    RDB2RDF映射器”是基于Java的软件桌面应用程序,它允许用户通过图形用户界面在关系数据库和RDFS / OWL本体之间创建映射文件。 该项目由ANDS资助。
  • 【大厂面试】面试官都爱问的 Redis 持久化 (RDB) 【大厂面试】面试官都爱问的 Redis 持久化 (AOF) RDB 持久化方式能够在指定的时间间隔能对你的数据进行快照存储 AOF 持久化方式记录每次对服务器写的操作,当服务器...
  • OWL4RDB 是一个 ORM(本体关系映射)工具。 OWL4RDB 项目旨在使云中的遗留关系数据库能够用作 OWL 本体。
  • rdb 文件查看工具

    2015-10-09 21:09:46
    可以打开rdb格式的文件,rdb文件的优点,自己可以去查。QQ里的图标资源就是rdb格式的,这个工具可以提取其中的图标,good lucy。
  • rdb-admin 红色数据库管理工具
  • RDB操作类模块.rar

    2020-04-05 11:57:56
    RDB操作类模块.rar
  • RDB数据转换为HBase时,非规范化是重要的一步。 HareDB数据模型管理是如上所述的GUI工具。 该工具提供了合并表功能,可以帮助您合并在RDB中具有关系的表。 它不仅提供了schama重新设计器,还提供了从RDB到HBase的...
  • rdb安装文档

    2018-03-09 18:15:56
    9 rows in set (0.00 sec) mysql> grant all privileges on *.* to root@'%' identified by 'isec@ZTE' with grant option; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to root@'%'...
  • 这里写目录标题15.1 RDB持久化15.1.1 SAVE:阻塞服务器并创建RDB文件其他信息15.1.2 BGSAVE:以非阻塞方式创建RDB文件其他信息15.1.3 通过配置选项自动创建RDB文件1.同时使用多个save选项2.默认设置15.1.4 SAVE命令...

    15.1 RDB持久化

            RDB持久化是Redis默认使用的持久化功能该功能可以创建出一个经过压缩的二进制文件其中包含了服务器在各个数据库中存储的键值对数据等信息RDB持久化产生的文件都以.rdb后缀结尾,其中rdb代表 Redis DataBase(Redis数据库)。

            Redis提供了多种创建RDB文件的方法,用户既可以使用SAVE命令或者 BGSAVE命令手动创建RDB文件也可以通过设置save配置选项让服务 器在满足指定条件时自动执行BGSAVE命令。本节接下来将分别介绍这 3种RDB文件的创建方法。

    15.1.1 SAVE:阻塞服务器并创建RDB文件

            用户可以通过执行SAVE命令,要求Redis服务器以同步方式创建出一个记录了服务器当前所有数据库数据的RDB文件。SAVE命令是一个无参数命令,它在创建RDB文件成功时将返回OK作为结果

    在这里插入图片描述

            接收到SAVE命令的Redis服务器将遍历数据库包含的所有数据库,并将各个数据库包含的键值对全部记录到RDB文件中在SAVE命令执行期间,Redis服务器将阻塞直到RDB文件创建完毕为止。如果Redis服务器在执行SAVE命令时已经拥有了相应的RDB文件,那么服务器将使用新创建的RDB文件代替已有的RDB文件,这个过程如图15-1所示。

    在这里插入图片描述

    其他信息

            复杂度:O(N),其中N为Redis服务器所有数据库包含的键值对总数量。

            版本要求:SAVE命令从Redis 1.0.0版本开始可用。

    15.1.2 BGSAVE:以非阻塞方式创建RDB文件

            因为SAVE命令在执行时会阻塞整个服务器,所以用户在使用该命令创 建RDB文件期间将无法为其他客户端提供服务。为了解决这个问题, Redis提供了SAVE命令的异步版本BGSAVE命令:这个命令与SAVE命令一样都是无参数命令,它与SAVE命令的不同之处在于,BGSAVE不会直接使用Redis服务器进程创建RDB文件,而是使用子进程创建RDB文件。

            当Redis服务器接收到用户发送的BGSAVE命令时,将执行以下操作:

            1)创建一个子进程。

            2)子进程执行SAVE命令,创建新的RDB文件。

            3)RDB文件创建完毕之后,子进程退出并通知Redis服务器进程(父进程)新RDB文件已经完成。

            4)Redis服务器进程使用新RDB文件替换已有的RDB文件。

            图15-2展示了这一执行过程。

            因为BGSAVE命令创建RDB文件的操作是由子进程以异步方式执行的, 所以当用户在客户端执行这个命令时,服务器将立即向客户端返回 OK然后才会在后台开始具体的RDB文件创建操作:

    在这里插入图片描述

            因为BGSAVE命令是以异步方式执行的,所以Redis服务器在BGSAVE 命令执行期间仍然可以继续处理其他客户端发送的命令请求。不过需要注意的是,虽然BGSAVE命令不会像SAVE命令那样一直阻塞Redis服务 器,但由于执行BGSAVE命令需要创建子进程,所以父进程占用的内存 数量越大,创建子进程这一操作耗费的时间也会越长,因此Redis服务器在执行BGSAVE命令时,仍然可能会由于创建子进程而被短暂地阻塞。

    其他信息

            复杂度:O(N),其中N为Redis服务器所有数据库包含的键值对总数量。

            版本要求:BGSAVE命令从Redis 1.0.0版本开始可用。

    15.1.3 通过配置选项自动创建RDB文件

            用户除了可以使用SAVE命令和BGSAVE命令手动创建RDB文件之外, 还可以通过设置save选项,让Redis服务器在满足指定条件时自动执行 BGSAVE命令:

    在这里插入图片描述

    在这里插入图片描述

            save选项接受seconds和changes两个参数前者用于指定触发持久化操作所需的时长,而后者则用于指定触发持久化操作所需的修改次数。简单来说,如果服务器在seconds秒之内,对其包含的各个数据库总共执行了 至少changes次修改,那么服务器将自动执行一次BGSAVE命令

            比如,如果我们向服务器提供以下选项:
    在这里插入图片描述
            那么当“服务器在60s秒之内至少执行了10000次修改”这一条件被满足时,服务器就会自动执行一次BGSAVE命令。

    1.同时使用多个save选项

            Redis允许用户同时向服务器提供多个save选项,当给定选项中的任意一 个条件被满足时,服务器就会执行一次BGSAVE。

            比如,如果我们向服务器提供以下选项:
    在这里插入图片描述

            那么当以下任意一个条件被满足时,服务器就会执行一次BGSAVE命令:

            ·在6000s(100min)之内,服务器对数据库执行了至少1次修改。

            ·在600s(10min)之内,服务器对数据库执行了至少100次修改。

            ·在60s(1min)之内,服务器对数据库执行了至少10000次修改。

            注意为了避免由于同时使用多个触发条件而导致服务器过于频繁地执 行BGSAVE命令,Redis服务器在每次成功创建RDB文件之后,负责自动触发BGSAVE命令的时间计数器以及修改次数计数器都会被清零并重 新开始计数:无论这个RDB文件是由自动触发的BGSAVE命令创建的, 还是由用户执行的SAVE命令或BGSAVE命令创建的,都是如此。

    2.默认设置

            RDB持久化是Redis默认使用的持久化方式如果用户在启动Redis服务器时,既没有显式地关闭RDB持久化功能,也没有启用AOF持久化功 能,那么Redis默认将使用以下save选项进行RDB持久化:

    在这里插入图片描述

    15.1.4 SAVE命令和BGSAVE命令的选择

            因为SAVE命令在创建RDB文件期间会阻塞Redis服务器,所以如果我们 需要在创建RDB文件的同时让Redis服务器继续为其他客户端服务,那 么就只能使用BGSAVE命令来创建RDB文件。

            因为SAVE命令无须创建子进程,它不会因为创建子进程而消耗额外的 内存,所以在维护离线的Redis服务器时,使用SAVE命令能够比使用 BGSAVE命令更快地完成创建RDB文件的工作。

    15.1.5 RDB文件结构

            在了解了如何创建RDB文件之后,接下来了解一下RDB文件的具体结构。

    1.总体结构

    在这里插入图片描述

            图15-3展示了RDB文件的总体结构,整个文件共分为7个部分。

            ·RDB文件标识符

            文件最开头的部分为RDB文件标识符,这个标识符的内容为"REDIS"这 5个字符。Redis服务器在尝试载入RDB文件的时候,可以通过这个标识 符快速地判断该文件是否为真正的RDB文件。

            ·版本号

            跟在RDB文件标识符之后的是RDB文件的版本号,这个版本号是一个字符串格式的数字,长度为4个字符。目前最新的RDB文件版本为第9版, 因此RDB文件的版本号将为字符串"0009"。不同版本的RDB文件在结构 上都会有一些不同,总的来说,新版RDB文件都会在旧版RDB文件的基 础上添加更多信息,因此RDB文件的版本越新,RDB文件的结构就越复 杂。

            关于RDB文件,需要说明的另外一点是新版Redis服务器总是能够向下 兼容旧版Redis服务器生成的RDB文件。比如,生成第9版RDB文件的 Redis 5.0既能够正常读入由Redis 4.0生成的第8版RDB文件,也能够读入由Redis 3.2生成的第7版RDB文件,甚至更旧版本的RDB文件也是可以 的。与此相反,如果Redis服务器生成的是较旧版本的RDB文件,那么 它是无法读入更新版本的RDB文件的。比如,生成第8版RDB文件的 Redis 4.0就不能读入由Redis 5.0生成的第9版RDB文件。

            ·设备附加信息

            RDB文件的设备附加信息部分记录了生成RDB文件的Redis服务器及其 所在平台的信息,比如服务器的版本号、宿主机器的架构、创建RDB文 件时的时间戳、服务器占用的内存数量等。

            ·数据库数据

            RDB文件的数据库数据部分记录了Redis服务器存储的0个或任意多个数 据库的数据,当这个部分包含多数个数据库的数据时,各个数据库的数 据将按照数据库号码从小到大进行排列,比如,0号数据库的数据将排 在最前面,紧接着是1号数据库的数据,然后是2号数据库的数据,以此 类推,图15-4展示了这一排列顺序。

            ·Lua脚本缓存

            如果Redis服务器启用了复制功能,那么服务器将在RDB文件的Lua脚本 缓存部分保存所有已被缓存的Lua脚本。这样一来,从服务器在载入 RDB文件完成数据同步之后,就可以继续执行主服务器发来的 EVALSHA命令了。

            ·EOF

            RDB文件的EOF部分用于标识RDB正文内容的末尾,它的实际值为二进 制值0xFF。当Redis服务器读取到EOF的时候,它知道RDB文件的正文 部分已经全部读取完毕了。

            ·CRC64校验和

            RDB文件的末尾是一个以无符号64位整数表示的CRC64校验和,比如 5097628732947693614。Redis服务器在读入RDB文件时会通过这个校验 和来快速地检查RDB文件是否有出错或者损坏的情况出现。

    2.数据库信息结构

            前面提到过,RDB文件的数据库数据部分包含了任意多个数据库的数据,其中每个数据库都由图15-5所示的4个部分组成

    在这里插入图片描述

            首先,第一部分以数字形式记录了数据库的号码,比如0Redis服务器 在读入RDB文件数据时,会根据这个号码切换至相应的数据库,从而确保键值对会被载入正确的数据库中

            在之后的两个部分,RDB文件会使用两个数字,分别记录数据库包含的键值对总数量以及数据库中带有过期时间的键值对数量Redis服务器将根据这两个数字,以尽可能优化的方式创建数据库的内部数据结构

            在最后一个部分,RDB文件将以无序方式记录数据库包含的所有键值 对。具体来说,数据库中的每个键值对都会被划分为最多5个部分,如 图15-6所示。

            正如图15-6所示,每个键值对开头的第一部分记录的是可能存在的过期 时间,这是一个毫秒级精度的UNIX时间戳。

    在这里插入图片描述

            之后的LRU信息或者LFU信息分别用于实现可选的LRU算法或者LFU算 法,并且因为Redis只能选择一种键淘汰算法,所以这两项信息将不会 同时出现,最多只会出现其中一种。

            至于最后三个部分则分别记录了键值对的类型(比如字符串、列表、散 列等)以及键和值。

    15.1.6 载入RDB文件

            在介绍完RDB文件的组成结构之后,接下就让我们了解一下Redis服务 器载入RDB文件的具体步骤。

            首先,当Redis服务器启动时,它会在工作目录中查找是否有RDB文件 出现,如果有就打开它,然后读取文件的内容并执行以下载入操作:

            1)检查文件开头的标识符是否为"REDIS",如果是则继续执行后续的载入操作,不是则抛出错误并终止载入操作。

            2)检查文件的RDB版本号,以此来判断当前Redis服务器能否读取这一 版本的RDB文件。

            3)根据文件中记录的设备附加信息,执行相应的操作和设置。

            4)检查文件的数据库数据部分是否为空,如果不为空就执行以下子操作:

                    ①根据文件记录的数据库号码,切换至正确的数据库。

                    ②根据文件记录的键值对总数量以及带有过期时间的键值对数量,设置数据库底层数据结构。

                    ③一个接一个地载入文件记录的所有键值对数据,并在数据库中重建这 些键值对。

            5)如果服务器启用了复制功能,那么将之前缓存的Lua脚本重新载入缓 存中。

            6)遇到EOF标识,确认RDB正文已经全部读取完毕。

            7)载入RDB文件末尾记录的CRC64校验和,把它与载入数据期间计算 出的CRC64校验和进行对比,以此来判断被载入的数据是否完好无损。

            8)RDB文件载入完毕,服务器开始接受客户端请求。

            图15-7展示了这一数据载入流程。

    请添加图片描述

    15.1.7 数据丢失

            RDB文件记录的是服务器在开始创建文件的那一刻,服务器中包含的所 有键值对数据,这种数据持久化方式通常被称为时间点快照(point-in- time snapshot)。时间点快照持久化的一个特点是,系统在停机时将丢失最后一次成功实施持久化之后的所有数据。对于一个只使用RDB持久化的Redis服务器来说,服务器停机时丢失的数据量将取决于最后一次成功执行的RDB持久化操作,以及该操作开始执行的时间。

            因为Redis允许使用SAVE和BGSAVE这两种命令来执行RDB持久化操作,所以接下来将分别分析这两个命令在遭遇故障停机时的表现。

    1.SAVE命令的停机情况

            因为SAVE命令是一个同步操作,它的开始和结束都位于同一个原子时间之内,所以如果用户使用SAVE命令进行持久化,那么服务器在停机 时将丢失最后一次成功执行SAVE命令之后产生的所有数据。

            以表15-1所示的情况为例,我们需要了解以下两点:

            ·因为服务器最后一次成功执行SAVE命令是在T7,所以服务器创建出的 RDB文件将包含键k1至键k4在内的数据,服务器在重启时将使用这个 RDB文件进行数据恢复。

            ·因为服务器在T7之后创建了键k5和键k6,并在之后出现停机,所以当 服务器重启时,键k5、k6的数据将丢失,而键k1至键k4的数据将被恢复。

    在这里插入图片描述

    2.BGSAVE命令的停机情况

            因为BGSAVE命令是一个异步命令,它的开始和结束并不位于同一个原子时间之内,所以如果用户使用BGSAVE命令进行持久化,那么服务器在停机时丢失的数据量将取决于最后一次成功执行的BGSAVE命令的开始时间。

            以表15-2所示的情况为例,我们需要了解以下三点:

            ·因为T7创建的新RDB文件尚未完成,所以服务器在停机之后将使用T5 成功创建的RDB文件进行数据恢复。

            ·虽然服务器现有的RDB文件是在T5成功创建的,但由于这个文件是在 T3开始创建的,所以它只包含了T3之前的数据,即键k1和键k2的数据。

            ·基于上述原因,当服务器重启时,只有键k1和键k2的数据会被恢复, 而键k3至键k6的数据则会丢失。

    在这里插入图片描述

    3.RDB持久化的缺陷

            总的来说,无论用户使用的是SAVE命令还是BGSAVE命令,停机时服 务器丢失的数据量将取决于创建RDB文件的时间间隔:间隔越长,停机时丢失的数据也就越多。

            然而矛盾之处在于,RDB持久化是一种全量持久化操作它在创建RDB 文件时需要存储整个服务器包含的所有数据,并因此消耗大量计算资源 和内存资源,所以用户是不太可能通过增大RDB文件的生成频率来保证 数据安全的。

            举个例子,虽然从技术上来说,用户可以在每次执行写命令之后都执行 一次SAVE命令,以此来保证数据处于绝对安全的状态,但这样一来 Redis服务器的性能将下降至无法正常使用的水平。相反,用户如果想 要保证服务器的性能处于合理水平,就不能过于频繁地创建RDB文件, 这样一来,也就不可避免地会出现因为停机而丢失大量数据的情况。

            从RDB持久化的特征来看,它更像是一种数据备份手段而非一种普通的数据持久化手段。为了解决RDB持久化在停机时可能会丢失大量数据这 一问题,并提供一种真正符合用户预期的持久化功能,Redis推出了15.2 节将要介绍的AOF持久化模式。

    参考目录

    绝大多数 内容来自 Redis使用手册 (黄健宏 著) 第15章 持久化

    展开全文
  • 解析,过滤和创建Redis RDB文件的工具 该模块当前提供: -一个“ streams2”,它了解Redis RDB文件并生成表示键和值的对象 编写器-转换程序,其使用生成的对象并生成Redis RDB文件 一个 -一种转换器,它接收Redis...
  • T1042D4RDB_revA_SCH.pdf

    2021-04-01 15:25:38
    T1042D4RDB_revA_SCH 。。。。。。。。。。。。。。。。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,108
精华内容 36,043
关键字:

rdb

友情链接: algorithm.zip