Redis的RDB和AOP总结

article/2025/8/29 17:38:41

目录

1.RDB和AOF是什么

2.RBD

     2.1 配置参数

          2.1.1 配置文件位置

          2.1.2 save

          2.1.3 stop-writes-on-bgsave-error

          2.1.4 rdbcompression

          2.1.5 rdbchecksum

          2.1.6 dbfilename

          2.1.7 dir

     2.2 fork

     2.3 如何触发RDB快照

          2.3.1 配置文件中默认的快照配置

          2.3.2 客户端使用命令save或者bgsave

          2.3.3 客户端shutdown会立刻刷新dump.rdb文件

     2.4 如何恢复

     2.5 RBD的优势

     2.6 RBD的劣势

3.AOF

     3.1 配置参数

          3.1.1 配置文件位置

          3.1.2 appendonly

          3.1.3 appendfilename

          3.1.4 appendfsync

          3.1.5 no-appendfsync-on-rewrite

          3.1.6 auto-aof-rewrite-percentage

          3.1.7 auto-aof-rewrite-min-size

          3.1.8 aof-load-truncated

     3.2 AOF修复

     3.3 AOF恢复

     3.4 Rewrite重写机制

          3.4.1 Rewrite是什么

          3.4.2 重写原理

          3.4.3 触发机制

     3.5 AOF的优势

     3.6 AOF的劣势


1.RDB和AOF是什么

       其实很多答案技术官网都有写而且写的非常详细,官网地址:https://redis.io/topics/persistence

       RDB (Redis Database):按指定的时间间隔执行数据集的时间点快照

       AOF (Append Only File):记录服务器接收的每个写入操作,采用仅追加方式将命令写入AOF文件,服务启动时再重新执行AOF文件中的命令以达到恢复数据的目的。使用与Redis协议本身相同的格式记录命令,具有很好的可读性。当日志太大时,Redis可以在后台重写日志(rewrite机制)。 

2.RBD

     2.1 配置参数

          2.1.1 配置文件位置

       redis.conf中SNAPSHOTTING部分

          2.1.2 save

       如果给定的秒数和对数据库执行的写入操作数都达到设定的阈值,则执行数据库持久化,通俗易懂的讲:配置RBD备份频率,默认行为:

  1. 900秒(15分钟)后,如果至少有一个键更改
  2. 300秒(5分钟)后,如果至少有10个键更改
  3. 60秒后,如果至少10000个键发生更改

          2.1.3 stop-writes-on-bgsave-error

默认情况下,如果启用RDB快照,Redis将停止接受写操作。这将使用户意识到(通过报错的方式)数据没有持久化。如果后台保存过程将重新开始工作,Redis将自动允许再次写入。但是,如果您已经设置了对Redis服务器的适当监视和持久性,您可能希望禁用此功能。通俗易懂的讲:此参数设为no,表示在进行RDB持久化时主进程将停止接受读写操作;设置成yes,表示在进行RDB持久化时主进程将继续接受读写操作,数据不一致的问题交由用户自己处理。

          2.1.4 rdbcompression

       对于存储到磁盘中的快照文件,设置是否进行压缩,redis采用LZF压缩算法,如果想节省CPU性能可以关闭此功能,默认yes。

          2.1.5 rdbchecksum

       存储快照后,还可以让redis使用CRC64算法进行数据校验,但是这样做大约会增加10%性能损耗,如果想获得最大性能可关闭此功能,默认yes。

          2.1.6 dbfilename

       将数据库转储到的文件名,默认dump.rdb

          2.1.7 dir

       工作目录,数据库中的数据将被写入这个目录,请注意必须在此处指定目录,而不是文件名,默认当前路径。

     2.2 fork

       fork的作用是复制一个与当前进程一样的进程,新进程的所有数据(变量、环境变量、程序计数器等)都和原进程一致,并作为原进程的子进程。

     2.3 如何触发RDB快照

          2.3.1 配置文件中默认的快照配置

save 900 1
save 300 10
save 60 10000

          2.3.2 客户端使用命令save或者bgsave

       save:执行save命令时只管保存,其他命令阻塞

       bgsave:bgsave命令会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间

          2.3.3 客户端shutdown会立刻刷新dump.rdb文件

       客户端使用shutdown会立刻刷新dump.rdb文件,前提是开启了RBD持久化

     2.4 如何恢复

       如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令:

CONFIG GET dir

     2.5 RBD的优势

(1)RDB是Redis数据的非常紧凑的单文件时间点表示。例如,您可能希望在最近24小时内每小时归档一次RDB文件,并在30天内每天保存一个RDB快照。这允许您在发生灾难时轻松恢复数据集的不同版本。

(2)RDB对于灾难恢复非常好,它是一个单一的压缩文件,可以传输到远端的数据中心,或者传输到AmazonS3(可能是加密的)。

(3)RDB最大限度地提高了Redis的性能,因为Redis父进程要持久化,唯一需要做的工作就是派生一个子进程来完成其余的工作。父实例永远不会执行磁盘I/O或类似操作。

(4)与AOF相比,RDB允许使用大数据集更快地重新启动。

     2.6 RBD的劣势

(1)数据风险大,RDB采用在一定时间间隔内做一次备份,如果redis服务意外down掉,就会丢失最后一次未备份的修改

(2)fork子进程进行备份时,内存中的数据被克隆了一份,需要考虑数据2倍膨胀的问题

3.AOF

     3.1 配置参数

          3.1.1 配置文件位置

          3.1.2 appendonly

       仅附加文件是一种提供更好的耐用性。例如,使用默认数据fsync策略(请参阅后面的配置文件)Redis在一段时间内只会丢失一秒钟的写操作。AOF和RDB持久性可以同时启用而不会出现问题。如果启动时启用了AOF,Redis将加载AOF,即文件具有更好的耐久性保证。通俗易懂的讲:启用AOF持久化

          3.1.3 appendfilename

       仅附加文件的名称,默认:appendonly.aof

          3.1.4 appendfsync

       fsync()调用告诉操作系统在磁盘上实际写入数据,而不是在输出缓冲区中等待更多的数据。appendfsync有三个参数,默认:everysec

       no:不要fsync,只要让操作系统在需要时刷新数据即可,更快。

       always:每次执行写入操作后进行fsync。慢,最安全。

       everysec:每秒同步一次。

          3.1.5 no-appendfsync-on-rewrite

       重写时(下面会讲到rewrite)是否可以使用appendfsync,默认:no,可以保证数据安全性。

          3.1.6 auto-aof-rewrite-percentage

       设置重写规则(下面会讲到rewrite)的文件大小倍率基准值,默认:100,代表含义为AOF文件大小超过上次重写AOF文件的一倍时则进行重写

          3.1.7 auto-aof-rewrite-min-size

       设置重写规则(下面会讲到rewrite)的文件大小基准值,默认:64mb,代表含义为AOF文件大小超过64mb则进行重写

          3.1.8 aof-load-truncated

       在Redis过程中,可能会发现AOF文件在末尾被截断的情况。如果aof load truncated设置为yes,则加载并删除一个截断的aof文件,Redis服务器会发出一个日志来通知用户该事件。否则,如果该选项设置为“否”,则服务器将中止并返回一个错误。当选项设置为“否”时,用户需要在重新启动之前,使用“redis check AOF”实用程序修复AOF文件。如果在加载过程中发现AOF文件已损坏,那么服务器仍将退出并出现错误。默认:yes

     3.2 AOF修复

       运行根目录下redis-check-aof --fix进行修复

     3.3 AOF恢复

       将appendonly.aof文件移动到redis根目录并启动服务

     3.4 Rewrite重写机制

          3.4.1 Rewrite是什么

       AOF采用文件追加的方式,会导致文件越来越大,为了避免出现此种情况,新增了持久化重写机制,当AOF文件大小超过了所设定的阈值,redis就会启用AOF的文件压缩,使得AOF文件只保留可以恢复数据的最小指令集,客户端可以使用bgrewriteaof命令来启动AOF重写

          3.4.2 重写原理

       随着AOF文件持续增长过大时,redis会fork 出一条新进程来将文件重写(也是先写临时文件最后rename ) , 遍历新进程的内存中数据,每条记录有一条的 Set 语句。重写 aof 文件的操作,并没有读取旧的 aof 文件,而是将整个内存中的数据内容用命令的方式重写了一个新的 aof 文件。

          3.4.3 触发机制

       redis会记录上次重写时AOF文件的大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大小大于64M时触发。也就是上文3.1.6、3.1.7的auto-aof-rewrite-percentage和auto-aof-rewrite-min-size参数

     3.5 AOF的优势

(1)使用AOF可以设置不同的fsync策略:完全不fsync,每秒fsync,每次查询fsync。使用fsync every second的默认策略,对于服务器执行写操作依旧可以保持不错的性能(fsync是使用后台线程执行的,当没有fsync进行时,主线程将努力执行写操作),但是您可能损失1秒的写操作。

(2)AOF日志是一个只附加的日志,因此在断电的情况下没有查找和损坏问题。即使由于某种原因(磁盘已满或其他原因)日志以半写命令结束,redis check aof工具也能够轻松地修复它。

(3)Redis能够在后台自动重写AOF。重写是完全安全的,因为当Redis继续附加到旧文件时,用创建当前数据集所需的最小操作集生成一个完全新的文件,并且一旦第二个文件准备就绪,Redis就会切换这两个文件并开始附加到新文件。

(4)AOF以易于理解和解析的格式存储了每个写操作日志记录,可以轻松导出AOF文件。例如,即使您不小心用FLUSHALL命令刷新了所有内容,只要在此期间没有重写日志,您仍然可以通过停止服务器、删除最新命令并重新启动Redis来保存数据集。

     3.6 AOF的劣势

(1)对于相同的数据集,AOF文件通常比等效的RDB文件大。

(2)AOF可能比RDB慢,具体取决于fsync策略。一般来说,fsync设置为每秒一次时,性能仍然非常高,禁用fsync时,即使在高负载下,它也应该与RDB一样快。

(3)在使用AOF时可能遇到十分罕见的错误(几乎可忽略不计),使用RDB持久性几乎不可能出现这种错误。


http://chatgpt.dhexx.cn/article/nPUEobNi.shtml

相关文章

redis RDB设计与实现

redis RDB设计与实现 文章目录 redis RDB设计与实现RDB功能RDB文件的创建和保存SAVE 和 BGSAVERDB保存冲突RDB文件的载入自动保存 RDB 文件结构 RDB功能 为了使Redis储存在内存中的数据库状态保存到磁盘里面防止丢失,Redis提供了RDB持久化功能,将Redis内…

比redis-rdb-tools快10倍的rdb分析工具

背景 为了满足快速分析rdb的情况,对rdr进行测试调研。 测试环境 测试机器:本机macbook pro 工具:rdr,redis-rdb-toolsrdb 文件:dump_7709.rdb,Redis实例大小3G,rdb文件大小1G git地址&…

Redis持久化之RDB原理

Redis持久化之RDB 一.RDB文件作用二. 触发条件三、执行流程1、总体流程2、fork实现复制原理 四、RDB文件五、 启动时加载六、 RDB常用配置总结七、优缺点1、优点2、缺点 个人复习笔记一.RDB文件作用 RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化)&a…

Redis RDB持久化

文章目录 一、持久化简介二、数据快照RDB1. save指令2. RDB文件相关配置验证save后数据保存在了rdb文件验证重启服务后,程序会从rdb文件中恢复数据到内存 3. bgsave指令4. 配置自动持久化5. RDB三种启动方式对比6. rdb特殊启动形式7. RDB优缺点 一、持久化简介 什么…

Redis 持久化与故障恢复之rdb

一、摘要 老生常谈一下吧,redis持久化分为rdb和aof两种模式,本篇先说一说rdb模式吧,共分为三部分:1:如何触发rdb持久化, 2:rdb持久化源码, 3:rdb文件解析。 ps:本文基于r…

【Redis】Redis持久化之RDB详解(Redis专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司…

redis持久化之rdb

redis持久化之rdb RDB相关配置rdb快照的触发条件rdb快照过程rdb文件结构rdb和aof文件的加载顺序 Redis的RDB持久化方式是指将某个时刻的内存数据进行快照,生成.rdb文件可以用于恢复快照时刻redis的内存数据。 RDB相关配置 我们可以在redis.conf中进行rdb相关的配置…

redis之AOF和RDB持久化

写在前面 redis数据存储在内存,为了避免服务器重启或者是宕机导致数据全部丢失,提供了数据持久化机制,有AOF(Append Only File)和RDB,接下来我们分别看下。 1:AOF 如下是我本地环境生成aof文件: 1.1&am…

AOFRDB

序言 主要用于查看不同备份模式可以调优的一些方式. RDB: Redis服务器在规定时间内将内存中的数据保存到指定路径的文件中,服务器重启的时候直接将RDB文件读取到内存中AOF:Redis服务器以日志的形式追加所有的REDIS操作,服务器重启的时候读取AOF文件依次执行一遍. 关于RDB最主…

RDB持久化触发机制

RDB持久化 触发机制 手动触发 手动触发分别对应save和bgsave命令: save命令:同步,在主线程中保存快照;阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上…

Redis RDB 和 AOF

导读 RDB 和 AOF 对比: 持久化方式选择 如果对数据安全性要求极高,应该同时使用两种持久化方式。 如果可以承受若干时间内的数据丢失,可以只使用 RDB 持久化。 不建议只使用 AOF 持久化,因为定时生成 RDB 快照(s…

java读取rdb_剖析Redis RDB文件

通过redis-cli中执行save或者bgsave可以得到RDB文件(文件名由配置文件中dbfilename指定,例如dbfilename "dump.rdb"),这个文件包含Redis实例中全量的数据,那么dump.rdb的文件格式大概是什么样的呢? RDB文件定义 获取RDB…

Redis RDB文件解析

Redis RDB是什么 Redis rdb是Redis快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据&#xff0c…

RDB 持久化详解

文章目录 持久化的执行SAVE:阻塞服务器并创建RDB文件BGSAVE:以非阻塞方式创建RDB文件通过配置文件自动创建RDB文件查看最近持久化时间 RDB优化配置1. save2. stop-write-on-bgsave-error3. rdbcompression4. rdbchecksum5. sanitize-dump-payload6. dbfi…

RDB持久化

RDB持久化 一、RDB快照实现二、快照用法三、执行快照时的数据修改四、RDB 和 AOF 合体 一、RDB快照实现 Redis 是内存数据库,但是它为数据的持久化提供了两个技术。 分别是「 AOF 日志和 RDB 快照」。 这两种技术都会用各用一个日志文件来记录信息,但…

RDB底层原理

Redis服务器自动保存功能的实现原理及文件中的各个组成部分 因为Redis是内存数据库,它将自己的数据库状态储存在内存里 面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面, 那么一旦服务器进程退出,服务器中的数据库…

Redis持久化原理(RDB)

在上一篇文章中,介绍了Redis的内存模型很重要,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的…

运行程序时出现 应用程序无法启动,因为应用程序的并行配置不正确

最近发布给客户的程序中,双击exe程序出现“应用程序无法启动,因为应用程序的并行配置不正确”,下面提示使用sxstrace跟踪调试应用程序运行时需要的动态库的版本和路径。 于是有以下操作: 步骤: 1.利用管理员身份运行命…

谷歌浏览器出现应用程序无法启动,因为应用程序的并行配置不正确....(亲测完美解决)

电脑开机 完整报错提示为: 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。 刚开始也在网上找了N久的解决方案(如:启动windws Mod…

成功解决“tesseral应用程序无法打开,因为运行程序并行配置不正确”

目前网上流传的两种方法1是启动Windows Modules Installer并重启 但我的并没有处于禁用状态。 第二种是查看日志安装对应库,比较麻烦。 无意中发现第三种方式,操作更为简单。 我的tesseral版本是7.0.6,初次打开会提示如题报错,…