redis数据结构-11(了解 Redis 持久性选项:RDB 和 AOF)

news2025/5/17 11:16:29

了解 Redis 持久性选项:RDB 和 AOF

Redis 提供了多个持久性选项,以确保数据持久性并防止在服务器发生故障或重启时丢失数据。了解这些选项对于为您的特定使用案例选择正确的策略、平衡性能和数据安全至关重要。本章节将深入探讨 Redis 中的两种主要持久性机制:Redis 数据库 (RDB) 快照和仅附加文件 (AOF)。我们将探讨它们的工作原理、优点和缺点以及如何配置它们。

了解 RDB 快照

RDB(Redis 数据库)持久性按指定的时间间隔执行数据集的时间点快照。这些快照表示 Redis 数据库在特定时刻的整个状态。

RDB 的工作原理

当指示 Redis 创建 RDB 快照时,它会执行以下步骤:

  1. **分 叉:**Redis 使用 fork() 系统调用创建子进程。此子进程是父进程(Redis 服务器)的精确副本。
  2. 数据转储: 然后,子进程遍历内存中的整个数据集,并将其写入磁盘上的临时文件。
  3. 文件压缩(可选): 默认情况下,Redis 使用 LZF 压缩来压缩 RDB 文件以减小其大小。这可以进行配置。
  4. 原子替换: 子进程完成 RDB 文件的写入后,它会以原子方式将旧的 RDB 文件(如果存在)替换为新的 RDB 文件。这可确保 RDB 文件始终处于一致状态。
  5. 子进程终止: 然后,子进程将退出,从而释放系统资源。

在整个过程中,父进程继续为客户端请求提供服务,从而最大限度地减少停机时间。但是,fork() 作可能会占用大量资源,尤其是对于大型数据集,因为它暂时需要双倍的内存。

配置 RDB 快照

您可以使用 redis.conf 文件中的 save 指令配置 RDB 快照。save 指令采用两个参数:秒数和在这些秒内必须发生的更改数才能触发快照。

例如:

save 900 1       # Save the DB if at least 1 key changed in 900 seconds
save 300 10      # Save the DB if at least 10 keys changed in 300 seconds
save 60 10000    # Save the DB if at least 10000 keys changed in 60 seconds

redis.conf 中的这些行定义了三个不同的保存点。如果满足_这些条件中的任何一个_ ,Redis 将触发 RDB 快照。您可以通过注释掉所有保存行来完全禁用 RDB 快照。

您还可以使用 redis-cli 中的 SAVEBGSAVE 命令手动触发 RDB 快照。

  • SAVE: 此命令执行同步保存,阻止 Redis 服务器,直到快照完成。通常不建议将其用于生产环境。
  • BGSAVE: 此命令使用上述相同的分叉机制执行异步保存。它允许 Redis 服务器在创建快照时继续为客户端请求提供服务。

RDB 的优势

  • **压 实 度:**RDB 文件非常紧凑,非常适合用于备份和灾难恢复。
  • **性能:**RDB 快照的创建(尤其是压缩)和还原速度相对较快。
  • **灾难恢复:**RDB 非常适合灾难恢复,因为单个文件代表整个数据集。
  • **数据可移植性:**RDB 文件易于移植,可以传输到其他服务器或存档以进行长期存储。

RDB 的缺点

  • **数据丢失可能性:**RDB 快照是时间点备份,因此在快照之间写入的任何数据在服务器发生故障时都将丢失。可能的数据丢失量取决于配置的存储间隔。
  • 分叉开销:fork() 作可能会占用大量资源,尤其是对于大型数据集,这可能会导致暂时的性能下降。

RDB 配置选项

除了 save 指令之外,redis.conf 中其他与 RDB 相关的配置选项还包括:

  • stop-writes-on-bgsave-error:如果设置为 yes(默认值),则当 BGSAVE 命令失败时,Redis 将停止接受写入作。这可以防止在出现磁盘错误或磁盘空间不足时损坏数据。
  • rdbcompression:如果设置为 yes(默认值),Redis 将使用 LZF 压缩 RDB 文件。将其设置为 no 可以提高 CPU 性能,但会导致 RDB 文件变大。
  • rdbchecksum:如果设置为 yes(默认值),Redis 将在 RDB 文件中包含一个校验和,以检测数据损坏。将其设置为 no 可以提高性能,但会降低数据完整性。
  • dbfilename:指定 RDB 文件的名称(默认值:dump.rdb)。
  • dir:指定 RDB 文件的存储目录(默认:Redis 工作目录)。

了解 AOF(仅追加文件)

AOF(仅附加文件)持久性为 RDB 快照提供了更持久的替代方案。AOF 不会定期拍摄快照,而是记录服务器收到的每个写入作。

AOF 的工作原理

启用 AOF 后,Redis 会将每个写入作(例如 SETHSET、``LPUSH) 附加到 AOF 文件中。此文件实质上包含对数据库执行的所有写入作的完整历史记录。

  1. 命令附加: 每次执行写入作时,Redis 都会将相应的命令附加到 AOF 文件中。该命令以 Redis 协议格式编写。
  2. **文件同步:**AOF 文件会定期同步到磁盘,以保证数据的持久性。此同步的频率是可配置的。
  3. AOF 重写: 随着时间的推移,AOF 文件可能会变得非常大,因为它包含所有写入作的历史记录。为了减小文件大小,Redis 可以执行 AOF 重写。AOF 重写会创建一个新的、更小的 AOF 文件,其中包含重新创建当前数据集所需的最少命令集。这与 RDB 快照的工作方式类似,但结果仍然是 AOF 文件。

配置 AOF

AOF 在 redis.conf 文件中配置。关键配置选项包括:

  • appendonly:设置为 yes 以启用 AOF 持久化。设置为 no 可禁用它(默认)。
  • appendfilename:指定 AOF 文件的名称(默认:appendonly.aof)。
  • appendfsync:指定 Redis 应将 AOF 文件同步到磁盘的频率。它可以具有以下值之一:
    • always:在每次写入作后同步。这提供了最高级别的数据持久性,但也提供了最低的性能。
    • everysec:每秒同步一次。这是数据持久性和性能之间的良好平衡(推荐)。
    • no:让作系统决定何时同步。这提供了最佳性能,但数据持久性级别最低。

AOF 重写配置

使用以下选项配置 AOF 重写:

  • auto-aof-rewrite-percentage:指定在触发重写之前 AOF 文件必须增长的百分比。例如,值 100 表示 AOF 文件的大小必须翻倍才能触发重写。
  • auto-aof-rewrite-min-size:指定触发重写之前 AOF 文件的最小大小。这可以防止重写非常小的 AOF 文件。

您还可以使用 redis-cli 中的 BGREWRITEAOF 命令手动触发 AOF 重写。

AOF 的优势

  • **高数据持久性:**AOF 提供比 RDB 更高的数据持久性,尤其是在使用 appendfsync alwaysappendfsync everysec 时。
  • 减少数据丢失: 如果服务器发生故障,AOF 可确保将数据丢失降至最低,因为只有最后几个尚未同步到磁盘的命令会丢失。
  • **人类可读格式:**AOF 文件采用人类可读格式(Redis 协议),因此可以更轻松地在需要时手动调试和恢复数据。

AOF 的缺点

  • **较大的文件大小:**AOF 文件通常比 RDB 文件大,因为它们包含所有写入作的历史记录。
  • **性能开销:**AOF 可能会带来性能开销,尤其是在始终使用 appendfsync 时。
  • **重写开销:**AOF 重写可能是资源密集型的,尽管它是在后台执行的。

RDB 与 AOF:比较

特征RDBAOF
数据持久性较低 (可能丢失数据)更高(最小数据丢失)
文件大小较小较大
性能更快更慢(尤其是 always
恢复时间更快较慢(需要重放命令)
配置save 指令appendonlyappendfsync 指令
使用案例备份、灾难恢复、缓存需要高数据持久性的应用程序

选择正确的持久性选项

RDB 和 AOF 之间的选择取决于您的具体要求:

  • RDB: 如果您需要快速备份和恢复,并且可以容忍一些数据丢失,请使用 RDB。它适用于数据丢失不严重的缓存方案。
  • 主干: 如果您需要高数据持久性并且无法承受丢失数据,请使用 AOF。它适用于数据完整性至关重要的应用程序,例如金融系统或存储关键用户信息的数据库。
  • 混合方法: 您还可以同时使用 RDB 和 AOF。在这种情况下,Redis 将使用 AOF 来恢复数据,因为它提供了最完整的数据集。RDB 仍可用于非关键情况下的备份和更快的恢复。

实例

示例 1:为缓存服务器配置 RDB

假设您使用 Redis 作为网站的缓存服务器。数据丢失是可以接受的,因为可以从主数据库中检索数据。在这种情况下,您可以配置具有相对不频繁的保存间隔的 RDB:

save 600 100      # Save if at least 100 keys changed in 600 seconds
save 300 1000     # Save if at least 1000 keys changed in 300 seconds
save 60 10000     # Save if at least 10000 keys changed in 60 seconds

此配置为缓存服务器提供了性能和数据持久性之间的良好平衡。

示例 2:为会话存储配置 AOF

假设您使用 Redis 作为电子商务网站的会话存储。数据丢失是不可接受的,因为它可能导致用户丢失购物车或被注销。在这种情况下,您应该每 sece 使用 appendfsync 配置 AOF:

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

此配置可确保每秒将每个会话更改写入磁盘,从而最大限度地降低数据丢失的风险。

示例 3:同时使用 RDB 和 AOF

对于假设的财务应用程序,您可以同时使用 RDB 和 AOF。每 squad 使用 appendfsync 的 AOF 可确保将事务记录的数据丢失降至最低。RDB 快照每天在非高峰时段拍摄,为灾难恢复和报告目的提供方便的备份。如果服务器发生故障,Redis 将使用 AOF 文件进行恢复。如果 AOF 文件已损坏或不可用,则可以将每日 RDB 快照用作回退,从而承认自上次快照以来可能会丢失数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32外设AD/DA-基础及CubeMX配置

STM32外设AD/DA-基础及CubeMX配置 一,什么是AD/DA二,基础概念1,模拟 vs 数字2,AD转换1,分辨率 (Resolution)2,参考电压 (Reference Voltage, Vref)3,采样率 (Sampling Rate) 3,DA转换…

React Native简介

React Native 是由 Meta(原 Facebook)开源的跨平台移动应用开发框架,基于 React 和 JavaScript,允许开发者使用同一套代码库构建 iOS 和 Android 原生应用。通过 JavaScript 调用原生组件实现高性能渲染。 跨平台开发 共享 80%-9…

GCC 使用说明

参数 -fPIC ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加…

Verilog HDL 语言整理

Verilog HDL 语言 Verilog HDL 简介 硬件描述语言Hardware Description Language是一种用形式化方法即文本形式 来描述和设计数字电路和数字系统的高级模块化语言 Verilog HDL(Hardware Description Language)是一种硬件描述语言,用于建模…

车道线检测----Lane-ATT

本文针对车道线检测----Lane-ATT论文所有细节进行阐述,有帮助的话点个收藏关注吧 保持对车道的关注:注意力引导的车道检测 摘要 但许多方法在保持实时效率方面存在问题,这对于自动驾驶车辆至关重要。在本文中,我们提出了LaneATT…

linux安装宝塔面板到数据盘

操作很简单,假如数据盘挂载在cipan1,在数据盘新建目录www,为了方便对应。 执行一下命令,创建软连接 ln -s /cipan1/www www 此时,根目录就出现了www文件夹 下面正常安装宝塔即可

【基础】Windows开发设置入门7:PowerShell的相关概念和使用

前言 大家熟悉的docker、Python,但对于Windows上有一套开配合开发的相对底层的环境设置,包括powershell、winget、WSL、还有开发驱动器什么的,我准备系统学一下,不然地基不牢,也盖不起冲天高楼~ 本节,介绍…

芯片生态链深度解析(一):基础材料篇——从砂砾到硅基王国的核心技术突围

【开篇:芯片——现代文明的“炼金术”】 当您滑动手机屏幕、驾驶新能源汽车、甚至用AI生成一幅画时,是否想过这些科技奇迹都始于一粒沙子?芯片,这个边长不足2厘米的黑色薄片,正是通过将砂砾提纯为高纯度硅锭&#xff…

一款利用ADB (安卓调试桥)来控制手机的玩机工具

—————【下 载 地 址】——————— 【​本章下载一】:https://drive.uc.cn/s/f36ed8ff62f74 【​本章下载二】:https://pan.xunlei.com/s/VOQDmKCq4u-CygjX9Tcn3fxEA1?pwdwf3t# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…

使用mermaid 语言绘画时序图和链路图

给大家展示一下效果, 官方地址:https://mermaid.nodejs.cn/ 官方开发地:https://mermaid.nodejs.cn/intro/#google_vignette graph LR%% 样式定义(完全保留) classDef user fill:#E1F5FE,stroke:#0288D1;classDef …

浅论3DGS溅射模型在VR眼镜上的应用

摆烂仙君小课堂开课了,本期将介绍如何手搓VR眼镜,并将随手拍的电影变成3D视频。 一、3DGS模型介绍 3D 高斯模型是基于高斯函数构建的用于描述三维空间中数据分布概率的模型,高斯函数在数学和物理领域有着广泛应用,其在 3D 情境下…

6种方式来探究数据集的的方法worldquant

覆盖率百分比 指金融数据字段(如股价、成交量、财务指标)在时间或空间上的有效数据比例。 时间维度:数据在历史周期内的完整度(如:某股票过去 1 年中,95% 的交易日有收盘价)。空间维度&#xf…

深度学习中的归一化:提升模型性能的关键因素

📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型辅助完成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认…

vue+threeJS 大理石贴图

嗨,我是小路。今天主要和大家分享的主题是“vuethreeJS 大理石贴图”。 通过 Vue 3 和 Three.js 实现大理石纹理效果,并将这种技术应用于产品展示、虚拟展览、甚至是互动游戏之中,其潜力无穷。今天主要介绍基础的大理石贴图。 vueth…

WebGL 3着色器和GLSL

我们之前提到过着色器和GLSL,但是没有涉及细节,你可能已经对此有所了解, 但以防万一,这里将详细讲解着色器和GLSL。 在工作原理中我们提到,WebGL每次绘制需要两个着色器, 一个顶点着色器和一个片段着色器&…

华为OD机试真题——通信系统策略调度(用户调度问题)(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

llamafactory SFT 从断点恢复训练

背景 我使用llamafactory sft 微调模型的时候。gpu停止运行了。日志文件没有任何的报错信息。 显存还是占用状态。 查看llamafactory的进程是下述信息: 151312 151306 91 17:42 ? 03:58:10 [llamafactory-cl] 既然如此,那就只能从断点恢复训练了。 …

计算机网络-----6分层结构

目录 “分层” 的设计思想: 计算机网络要完成的功能: 计算机网络的分层结构: 网络体系结构的概念: 各层之间的关系: 数据的传输过程 水平视角: 垂直视角: 相关概念 协议三要素&#x…

运算放大器相关的电路

1运算放大器介绍 解释:运算放大器本质就是一个放大倍数很大的元件,就如上图公式所示 Vp和Vn相差很小但是放大后输出还是会很大。 运算放大器不止上面的三个引脚,他需要独立供电; 如图比较器: 解释:Vp&…

python版本管理工具-pyenv轻松切换多个Python版本

在使用python环境开发时,相信肯定被使用版本所烦恼,在用第三方库时依赖兼容的python版本不一样,有没有一个能同时安装多个python并能自由切换的工具呢,那就是pyenv,让你可以轻松切换多个Python 版本。 pyenv是什么 p…