Redis 持久化双雄:RDB 与 AOF 深度解析

Redis 是一种内存数据库,为了保证数据在服务器重启或故障时不丢失,提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File)。以下是它们的详细介绍:

一、RDB 持久化

  • 工作原理:RDB 持久化是将 Redis 在内存中的数据库状态保存到磁盘上的一个 RDB 文件中。可以通过配置文件设置触发 RDB 持久化的条件,例如在指定的时间间隔内,当数据发生一定次数的修改时,自动触发 RDB 快照。也可以手动执行SAVEBGSAVE命令来生成 RDB 文件。SAVE命令会阻塞 Redis 服务器,直到 RDB 文件生成完毕;BGSAVE命令则会在后台 fork 一个子进程来执行 RDB 文件的生成,不会阻塞服务器。
  • 优点
    • 文件紧凑:RDB 文件是一个经过压缩的二进制文件,它存储了某个时间点上 Redis 数据库的完整快照,占用空间相对较小,便于传输和备份。
    • 恢复速度快:在恢复数据时,RDB 文件可以直接被加载到内存中,速度比 AOF 快很多,因为它只需要将文件中的数据读入内存即可,不需要像 AOF 那样重新执行一遍命令日志。
  • 缺点
    • 数据可能丢失:由于 RDB 是按照一定的时间间隔进行快照的,如果在两次快照之间发生服务器故障,那么这期间的数据修改将会丢失。
    • fork 进程开销:在执行BGSAVE命令时,需要 fork 一个子进程来进行数据持久化,这个过程会消耗一定的内存和 CPU 资源,可能会影响服务器的性能。

二、AOF 持久化

  • 工作原理:AOF 持久化是将 Redis 执行的写命令以日志的形式追加到 AOF 文件的末尾。当 Redis 服务器重启时,会重新执行 AOF 文件中的命令,以恢复数据库的状态。AOF 文件的写入可以配置为不同的策略,如always(每执行一条写命令就立即写入磁盘)、everysec(每秒写入一次磁盘)和no(由操作系统决定何时写入磁盘)。
  • 优点
    • 数据安全性高:可以通过配置always策略,保证每一条写命令都被持久化到磁盘,最大限度地减少数据丢失的风险。即使采用everysec策略,在最坏的情况下也只会丢失一秒钟的数据。
    • 可读性好:AOF 文件是一个文本文件,内容是 Redis 的写命令,易于阅读和分析,方便进行故障排查和数据恢复。
  • 缺点
    • 文件体积大:由于 AOF 文件记录了所有的写命令,随着时间的推移,文件会越来越大,占用的磁盘空间也会越来越多。虽然 Redis 提供了BGREWRITEAOF命令来对 AOF 文件进行重写,压缩文件体积,但在重写过程中仍然会消耗一定的资源。
    • 恢复速度慢:在恢复数据时,需要重新执行 AOF 文件中的所有命令,因此恢复速度比 RDB 慢很多,尤其是当 AOF 文件非常大时,恢复时间可能会很长。

实际应用中,通常会将 RDB 和 AOF 两种持久化方式结合使用,以充分发挥它们的优点,同时避免各自的缺点。例如,可以使用 RDB 来定期备份数据库,以便在服务器故障时能够快速恢复数据;同时使用 AOF 来记录实时的写命令,保证数据的安全性和完整性。

注:RDB与AOF对比表

对比维度RDBAOF
备份量备份量取决于快照时刻的数据量,通常较小,因为存储的是某一时刻的完整数据状态备份量随时间不断增长,因为持续记录写命令,当使用BGREWRITEAOF重写后会减少,但总体通常比 RDB 大
保存间隔时间可通过配置设置,如多久内有多少次写操作就触发快照,常见配置如 900 秒内有 1 个 key 变化、300 秒内有 10 个 key 变化、60 秒内有 10000 个 key 变化等对于always策略,每条命令都保存;everysec策略每秒保存;no策略由操作系统决定保存时间间隔
数据安全性相对较低,按时间间隔快照,两次快照间故障会丢失数据,如设 5 分钟快照,第 3 分钟崩溃则丢失这 3 分钟数据较高,可配置写入策略减少数据丢失。always策略基本不丢数据,everysec策略最坏丢 1 秒数据
恢复速度快,二进制文件,恢复时直接加载数据到内存,数据量大时优势明显慢,需重新执行 AOF 文件中所有写命令,文件大时恢复时间长
文件大小文件紧凑,占用空间小,是压缩二进制文件,存储时间点数据库完整快照文件体积大,记录所有写命令,随时间增大,可用BGREWRITEAOF重写但消耗资源
性能影响执行BGSAVE需 fork 子进程,消耗内存和 CPU 资源,数据量大时可能短暂阻塞服务器取决于写入策略。always严重影响性能;everysec影响小;no由操作系统决定,性能影响最小但安全性低
可读性二进制文件,内容不可读,不便查看分析文本文件,内容为 Redis 写命令,可读性好,便于故障排查和数据恢复
适用场景适用于对恢复速度要求高、能容忍一定数据丢失的场景,如缓存系统适用于对数据安全性要求高的场景,如数据库系统

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

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

相关文章

数据结构|并查集

Hello !朋友们,这是我在学习过程中梳理的笔记,以作以后复习回顾,有时略有潦草,一些话是我用自己的话描述的,可能不够准确,还是感谢大家的阅读! 目录 一、并查集Quickfind 二、两种算…

【GPU 微架构技术】Pending Request Table(PRT)技术详解

PRT(Pending Request Table)是 GPU 中用于管理 未完成内存请求(outstanding memory requests)的一种硬件结构,旨在高效处理大规模并行线程的内存访问需求。与传统的 MSHR(Miss Status Handling Registers&a…

远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程

文章目录 前言1. OMV安装Cpolar工具2. 配置OMV远程访问地址3. 远程访问OMV管理界面4. 固定远程访问地址 前言 在这个数据爆炸的时代,无论是管理家人的照片和视频,还是企业老板处理财务报表和技术文档,高效的数据管理和便捷的文件共享已经变得…

微服务架构下的熔断与降级:原理、实践与主流框架深度解析

微服务架构下的熔断与降级:原理、实践与主流框架深度解析 在现代分布式系统中,熔断 (Circuit Breaker) 和 降级 (Degrade) 是保障系统弹性与高可用性的核心机制。本文将系统解析两者的原理、区别与协同方式,并结合主流框架 (Resilience4j、S…

docker-vllm运行大模型

vllm镜像下载,国内代理源 vllm/vllm-openai - Docker Image - 毫秒镜像https://1ms.run/r/vllm/vllm-openai 执行下载docker pull docker.1ms.run/vllm/vllm-openai 查看本地镜像 查看镜像 查看镜像 docker images导出镜像 docker save -o E:\docker\ollama.tar …

基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)

对上一节进行优化: 1、识别多个excel 2、将表格中的nan替换成空字符串 一、示例中的pdf内容 二、完整代码参考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…

【10分钟读论文】Power Transmission Line Inspections电力视觉水文

标题Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems 2024 评分一颗星 论文《Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems》的核心内…

linux安装ragflow

先安装docker,操作步骤参考文章: Linux安装Docker docker安装完毕,下载ragflow源码: https://github.com/infiniflow/ragflow 下载完成,进入docker文件夹中,修改.env文件,因为默认安装的是sli…

学习记录:DAY20

技术探索之旅:YAML配置,依赖注入、控制反转与Java注解 前言 最近有点懒了,太松懈可不行。为了让自己保持学习的动力,我决定将最近的学习内容整理成博客,目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…

MCP:人工智能时代的HTTP?探索AI通信新标准

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

首版次误区有哪些?与软件测试报告又有什么联系?

在软件开发与测试领域,"首版次"这一概念关乎软件的版本控制与管理,是确保产品质量和发布节奏的重要环节。首版次,通常是指软件产品第一个对外发布或内部验收的版本号,标志着一次完整开发周期的结束和下一阶段工作的开始…

Laravel+API 接口

LaravelAPI 接口 网课连接:BIlibili. 中文文档. 1.RestFul Api编码风格 一、API设计 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用这个域名来测试(推荐规范) 在…

MIT6.S081-lab7前置

MIT6.S081-lab7前置 这部分包含了设备中断和锁的内容 设备中断 之前系统调用的时候提过 usertrap ,而我们的设备中断,比如计时器中断也会在这里执行,我们可以看看具体的逻辑: void usertrap(void) {int which_dev 0;if((r_sst…

Linux 下编译BusyBox

一、linux下编译 1.拉取busybox源码 git clone https://github.com/mirror/busybox.git 内容如下 2.配置make,建议在linux下单独开一个终端执行 进入busybox源码目录,使用如下命令 make menuconfig 3.报错 解决办法: 安装ncurses sud…

Element:Cheack多选勾选效果逻辑判断

效果展示 取消子级勾选&#xff0c;父级的勾选效果 代码合集 &#xff08;1&#xff09;组件代码 fromlist.cheackType 类型&#xff0c;permissio表示是权限. fromlist:[{id:1,children:[{...}]},...]传递的数据大致结构 <!-- 操作权限 --><template v-if"…

【3DMax脚本MaxScript开发:创建高效模型虚拟体绑定和材质管理系统,从3DMax到Unreal和Unity引擎_系列第一篇】

3ds Max 脚本开发 3ds Max 脚本开发&#xff1a;创建高效模型虚拟体绑定和材质管理系统3ds Max 插件制作背景&#xff1a;设计思路一、场景节点收集与过滤废话不多说&#xff0c;直接上完整代码&#xff1a;界面定义与基础设置界面控件创建状态变量核心逻辑函数过滤选项改变事件…

【Linux学习笔记】进程替换和自定义shell

【Linux学习笔记】进程替换和自定义shell &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】进程替换和自定义shell前言一.进程程序替换1.1 替换原理1.2 替换函数1.2.1函数解释1.2.2命名理解 二.自主…

【办公类-89-03】20250429AI写的研讨记录,清除格式,统一格式,名字替换。部分加粗,添加页眉

背景需求: 检查自即,需要AI一下院内的五次科研培训记录。 本次用了豆包 豆包写的不错,也是“水字数”的高手 把每次培训内容贴到WORD里 把AI资料贴到WORD里,发现问题: 1、字体、段落什么都是不统一的,需要统一改成宋体小四,1.5倍行距 2、十个研讨人也要改成真人。就找…

unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录

奥比中光的深度相机Orbbec Femto Bolt是Microsoft的Azure Kinect DK的升级版&#xff0c;根据官网的文档配置环境遇到了一些问题&#xff0c;记录一下。 注意&#xff1a; 官网文档链接&#xff1a;Femto Bolt文档 1、首先连接相机到电脑USB3.0&#xff0c;接通电源&#xf…

聊天室系统:多任务版TCP服务端程序开发详细代码解释

1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端&#xff0c;如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢? 完成多任务&#xff0c;可以使用线程&#xff0c;比进程更加节省内存资源。 2. 具体实现步骤 编写一个TCP服务端程序&#xff0c;循环等…