【经验】Redis 持久化机制 RDB 和 AOF 区别

大家好,我是 V 哥。咱们都知道Redis的持久化机制主要包括RDB(Redis DataBase)和AOF(Append Only File),今天来聊聊它们的区别以及应用场景哈。
V 哥推荐:2024 最适合入门的 JAVA 课程 http://t.csdnimg.cn/3auFZ

1. RDB与AOF 的区别

1. RDB 持久化
  • 原理:在指定的时间间隔内将数据快照保存到磁盘。
  • 文件生成:会生成一个存储整个数据库状态的二进制文件,默认文件名为dump.rdb
  • 触发方式:可以在指定时间间隔后自动触发(如在save配置下)或手动执行BGSAVE命令。
  • 优点
    • 速度快:适合快速备份和恢复大量数据。
    • 体积小:生成的文件是数据的压缩快照,占用空间小。
    • 加载快:启动时加载RDB文件速度较快。
  • 缺点
    • 不实时:无法做到数据实时持久化,会丢失最近一次快照后的数据。
    • 大量数据写入时性能波动:RDB文件生成时需要Fork子进程,内存占用较高。
2. AOF 持久化
  • 原理:将每个写操作记录到文件中,类似于日志的方式。
  • 文件生成:会记录每条写命令,默认文件名为appendonly.aof
  • 触发方式:可以通过alwayseverysecno三种模式控制写入频率。
  • 优点
    • 数据安全性高:可以实时保存数据,减少数据丢失风险,适合对数据安全性要求高的场景。
    • 可读性:AOF是文本格式,便于读取和修改。
  • 缺点
    • 文件体积大:比RDB文件更大,尤其是频繁写入数据的场景。
    • 恢复速度慢:因为需要逐条命令执行,恢复速度较慢。
    • 写入效率稍低:频繁写入的场景可能会影响性能。
3. 小结一下
  • RDB适用于备份数据和快速恢复场景,适合对数据实时性要求不高、恢复速度要求高的场景。
  • AOF适用于需要更高数据安全性、能够接受较大存储空间的场景。

2. RDB 与 AOF 的使用场景

Redis中的RDB和AOF持久化机制在不同使用场景下有不同的优缺点,可以根据具体需求来选择或结合使用这两种机制。以下是两种机制的常见使用场景及配置方法:

一、RDB 使用场景及配置方法
1. 数据备份与灾备
  • 场景:RDB适合用于定期备份和数据恢复,能帮助快速恢复Redis实例到某一特定时间点。因为RDB文件是紧凑的二进制格式,占用空间小且恢复速度快,非常适合灾备场景。
  • 配置方法
    • redis.conf文件中,通过设置save指令来定义自动触发快照的时间间隔。例如:
      save 900 1  # 每900秒至少有1次写操作时触发RDB快照
      save 300 10 # 每300秒至少有10次写操作时触发RDB快照
      save 60 10000 # 每60秒至少有10000次写操作时触发RDB快照
      
    • 手动触发快照:在需要时可以通过命令手动触发快照,执行BGSAVE命令生成快照文件。
    • 恢复操作:直接重启Redis实例时,Redis会自动加载dump.rdb文件来恢复数据。
2. 读多写少的场景
  • 场景:对于绝大部分是读请求的场景,写请求较少且对数据实时性要求不高,如缓存系统,RDB的持久化效率更高。生成RDB文件不会影响到大量读请求的效率,同时可以减少磁盘IO。
  • 配置方法
    • 配置较长的save时间间隔或减少快照触发条件,减少频繁生成快照的压力。
3. 快速冷启动
  • 场景:对于需要在短时间内重启并迅速恢复数据的场景,RDB的启动速度更快,适合在冷启动时通过RDB来恢复数据。
  • 配置方法
    • 定期生成RDB快照,确保启动时Redis能够快速读取dump.rdb文件,恢复到最近的一次快照状态。

二、AOF 使用场景及配置方法
1. 高数据安全性场景
  • 场景:在业务中对数据丢失敏感的场景,比如电商、金融等行业中关键数据需要高安全性和实时性,可以使用AOF确保在系统意外崩溃时,丢失的数据最少。
  • 配置方法
    • redis.conf文件中启用AOF:
      appendonly yes
      
    • 选择持久化的同步策略:
      • appendfsync always:每次写操作后都同步写入AOF文件,保证数据实时性,适合强数据一致性要求的场景,但性能开销较大。
      • appendfsync everysec:每秒将数据同步写入AOF文件,常用配置,能够在性能和数据安全性之间取得平衡。
      • appendfsync no:完全依赖操作系统控制同步时间,可能会导致较多数据丢失。
2. 写操作频繁场景
  • 场景:对于写操作频繁且不易产生较多读操作的场景,如订单处理、实时数据收集等,AOF更合适。AOF以日志形式记录每条写操作,能够实现近乎实时的持久化。
  • 配置方法
    • 设置appendfsync everysec策略,以确保数据安全的同时不过于频繁地写入磁盘,避免性能瓶颈。
    • 定期使用BGREWRITEAOF对AOF文件进行重写压缩,减小文件大小,提升恢复速度。
3. 可读性需求的调试场景
  • 场景:在开发和测试中需要追踪、回放数据操作的场景,AOF文件可以记录详细的写操作日志,并且是文本格式,便于阅读和分析。
  • 配置方法
    • 启用AOF模式,并选择适当的同步策略,在调试过程中可随时读取AOF文件来分析写入操作的顺序和状态。
    • 在问题排查后可以通过分析AOF内容,找到系统出现问题时的操作。

三、RDB 和 AOF 混合使用场景

在实际应用中,通常将RDB和AOF混合使用,以利用它们各自的优点:

1. 兼顾数据安全与性能
  • 场景:需要高数据安全但又不希望频繁进行文件写入的场景,适合使用RDB+AOF组合,使数据具备较高的持久性和恢复速度。可以让Redis在冷启动时先加载RDB,再用AOF追加的操作恢复至最近状态。
  • 配置方法
    • 同时开启RDB和AOF:
      save 900 1
      appendonly yes
      appendfsync everysec
      
    • RDB快照的间隔可以适当设置得长一些,而AOF则配置成每秒同步,确保在发生故障时丢失的数据量很小。
2. 确保系统重启后的快速恢复
  • 场景:系统重启后需要快速恢复服务时,RDB和AOF组合可以兼顾数据恢复的速度与安全性,RDB文件用来快速加载基础数据,AOF保证最小的数据丢失。
  • 配置方法
    • 设置appendonly yesappendfsync everysec,同时配置RDB的定期快照,Redis重启时会优先使用RDB文件恢复,再根据AOF文件恢复最近操作。
3. 读写混合场景中的性能优化
  • 场景:适用于同时有较多读写操作的场景,可以使用RDB的快照减少AOF文件大小,通过AOF记录增量数据,避免频繁写入的性能问题。
  • 配置方法
    • 定期触发RDB快照的条件较宽松,以减少AOF文件的写入和重写频率,并在内存富余情况下通过BGSAVE来保持Redis状态。

最后

关于 RDB与AOF 也会经常在面试时被问到,结合自己做过的应用场景来分析和回答,会更有说服力,这会表现出你是如何善用技术的优势来解决问题,这是实战经验中的宝贵经验。关注威哥爱编程,一起卷它个底朝天。

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

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

相关文章

docker占用磁盘过多问题

我在windows系统上用docker,安装在C盘环境下,我发现C盘占用了大量的空间,查找后发现是docker的映像文件占用的,于是开始清理,中间还踩个坑,记录一下,下次需要的时候方便找。 踩坑 我本想移动映…

Xss_less靶场攻略(1-18)

xss-lab-less1 ur特殊字符转义 存在url中 转义符为 %2B& 转义符为 %26空格 转义符为 或 %20/ 转义符为 %2F? 转义符为 %3F% 转义符为 %25#转义符为 %23 转义符为 %3Dimg 标签懒加载 在XSS攻击中,img标签的src属性是一个常见的攻击向量,因为它可以…

聊聊Web3D 发展趋势

随着 Web 技术的不断演进,Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来,由于 WebGL、WebGPU 等技术的发展,3D 内容已经能够直接在浏览器中渲染,为用户提供更加沉浸、互动的体验。以…

【传知代码】图像处理解决种子计数方法

文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…

uniapp开发【点击展示弹窗功能】

一、效果展示 二、代码 <template><view class="mini"><view class="block_item" @click="$refs.popup.op

centos7.X zabbix监控参数以及邮件报警和钉钉报警

1&#xff1a;zabbix安装 1.1 zabbix 环境要求 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘&#xff08;最低&#xff09; 操作系统: Linux centos7.2 x86_64 Python 2.7.x Mariadb Server ≥ 5.5.56 httpd-2.4.6-93.el7.centos.x86_64 PHP 5.4.161.2 zabbix安装版本 [rootnod…

根据输入的详细地址解析经纬度

摘要&#xff1a; 今天遇到一个需求&#xff1a;就是做客户导入的时候因为导入的客户地址的时候没有经纬度的&#xff0c;但是同步的时候需要经纬度的&#xff0c;所以还是要根据客户提供的详细地址解析出来对应的经纬度&#xff01;回填到对应的经纬度的表单之中进行客户的同步…

upload-labs靶场Pass-21

upload-labs靶场Pass-21 本关上传方法众多&#xff0c;但是应该考察的是数组后缀绕过&#xff0c;所以我的上传围绕此展开 1.分析源码 $is_upload false; // 初始化上传状态为false $msg null; // 初始化消息变量为null// 检查是否有文件上传 if(!empty($_FILES[upload_fi…

Flutter实战短视频课程

1、课程导学 一套代研运行多蜡 体州一致&#xff0c;目胜能优昇 未来大趋势 不改交原生项目的基础上&#xff0c;扩展Flutter能力 Flutter原生灵话切涣 0入侵 最简单、最通用 最新Flutter 3,x新特性讲解 大量flutter官方组件和api学习 最常用的第三方库使用及原理解析 自研组…

Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化&#xff1a;Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表&#xff0c;我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一&#xff0c;不仅支持多种常用图表&…

无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划

着重介绍通过对三维 PCD 点云进行处理生成 2D 栅格地图 PGM&#xff0c;而后将该 PGM 地图充分运用到无人系统路径规划之中&#xff0c;使得无人机能够依据此规划合理避开飞行路线上可能出现的障碍物。&#xff08;解决如何使用PGM的问题&#xff09; Hybrid A*算法 参考博客…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

浮动+flex布局

一.浮动 1.介绍 2.效果 <style> .one{ width: 100px; height: 100px; background-color: red; float: left; } .two{ width: 200px; height: 200px; background-color: blue; float: right; } </style> </head> <body> <div class"one&quo…

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;在每一个节点增加了一个存储位来表示节点的颜色&#xff0c;可以是红色也可以是黑色&#xff0c;通过约束颜色来维持树的平衡&#xff0c;具有以下的性质&#xff1a; 每个节点不是红色就是黑色根节点为黑色如果…

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…

rom定制系列------红米note8_miui14安卓13定制修改固件 带面具root权限 刷写以及界面预览

&#x1f49d;&#x1f49d;&#x1f49d;红米note8机型代码&#xff1a;ginkgo。高通芯片。此固件官方最终版为稳定版12.5.5安卓11的版本。目前很多工作室需要高安卓版本的固件来适应他们的软件。并且需要root权限。根据客户要求。修改固件为完全root。并且修改为可批量刷写的…

MicroServer Gen8再玩 OCP万兆光口+IT直通之二

这个接上一篇&#xff0c;来个简单测试。 一、测试环境 PC端&#xff1a;Win10&#xff0c;网卡&#xff1a;万兆光纤&#xff08;做都做了&#xff0c;都给接上&#xff09;&#xff0c;硬盘使用N年的三星SSD 840 交换机&#xff1a;磊科GS10&#xff0c;带两个万兆口 Gen…

怎么理解ES6 Proxy

Proxy 可以理解成&#xff0c;在目标对象之前架设一层 “拦截”&#xff0c;外界对该对象的访问&#xff0c;都必须先通过这层拦截&#xff0c;因此提供了一种机制&#xff0c;可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理&#xff0c;用在这里表示由它来 “代理…

揭秘代码界的新挑战:低代码平台,为何让程序员头疼不已?

我最近在网上看到一个很有趣的话题&#xff1a;为什么程序员大多讨厌低代码&#xff1f;好家伙&#xff0c;这一下子就将低代码推到了程序员的对立面&#xff0c;两者直接到了水火不容的地步。 其实低代码倒也不是什么新鲜事物&#xff0c;它是一种只需用很少甚至不需要代码即可…

APP如何提升关键词排名?

提升关键词排名是ASO&#xff08;App Store Optimization&#xff09;策略中的关键环节&#xff0c;以下是一些有效的方法来提高App在应用商店中的关键词排名&#xff1a; 1. **关键词研究**&#xff1a; - 使用专业的ASO工具进行关键词研究&#xff0c;找出与你的App相关且…