首页 > 数据库 >详解Redis的持久化RDB和AOF

详解Redis的持久化RDB和AOF

时间:2024-03-19 23:59:25浏览次数:24  
标签:AOF 持久 文件 Redis RDB 数据

Redis的持久化是将内存中的数据同步到硬盘的过程

具体来说,Redis支持两种主要的持久化方式:RDBAOF

RDB(Redis Database)

简介

默认持久化方式

RDB会将内存中的数据快照保存到磁盘上的一个二进制文件中。这个文件包含了Redis在某个时间点上的所有数据,包括键值对及其过期时间等信息。

优缺点 

RDB的优点在于文件紧凑、占用空间较小,且恢复数据速度快。

缺点是可能会丢失最后一次快照之后的所有数据,并且在数据恢复时需要加载整个文件,这可能会导致较长的恢复时间。

save 和 bgsve

RDB的触发分为手动触发和自动触发两种。手动触发可以通过执行SAVEBGSAVE命令来完成,而自动触发则是通过配置文件设置相关规则实现的。

在执行SAVE命令时,Redis会阻塞所有客户端命令,直到持久化过程完成。

BGSAVE命令则通过创建子进程来进行持久化操作,这样主进程可以继续处理客户端请求。

使用场景

RDB持久化适用于能够容忍一定数据丢失的场景,比如非关键数据的备份,或者作为其他持久化策略(如AOF)的补充。由于RDB在某个时间点提供数据的快照,它恢复数据的速度比AOF更快。

性能

虽然RDB在持久化过程中会占用一些时间和资源,但是只有在触发持久化的时候才会发生性能开销,而在平时不会影响Redis的性能。

恢复

当系统崩溃后重启Redis时,RDB文件可以被用来恢复到最近一次持久化时的数据状态。由于RDB文件是压缩的二进制文件,其加载速度通常比较快。

AOF(Append Only File)

简介

AOF持久化是一种追加日志的方式,它会将Redis接收到的每个写命令追加到一个日志文件中。

这个日志文件以文本形式记录了Redis服务器所执行的所有写操作指令,如键的创建、更新和删除等。这种机制保证了即使在系统故障的情况下,只要AOF文件存在,就可以通过重新执行这些命令来恢复数据到最近的状态。

优缺点 

AOF的优点在于数据更加完整和安全,因为每个写操作都被记录下来,而且可以按照不同的策略进行持久化,如每秒同步或每个写命令同步。

其缺点是文件较大,占用的磁盘空间比RDB要大,且恢复数据速度相对较慢,因为需要重新执行日志文件中的所有命令。

开启方式

要启用AOF持久化,需要在Redis配置文件redis.conf中将appendonly选项设置为yes。一旦开启,Redis会根据设定的写入策略将写命令同步到AOF文件。

常用策略

策略包括:

  • always:每个写操作后立即同步,提供最高的数据安全性,但性能影响最大。
  • everysec(默认):每秒同步一次,平衡了性能和数据安全性。
  • no:由操作系统决定何时同步,性能最好,数据安全性最低。

性能

AOF文件会随着时间不断增长,为了效率和性能,Redis还提供了AOF文件重写机制。重写过程会创建一个新的AOF文件,该文件记录了恢复当前数据集所需的最小写命令集。这个过程可以手动触发或根据配置文件中设置的规则自动进行。

与RDB相比,AOF提供了更好的数据安全性,因为它记录了每个写操作,从而在理论上可以实现对数据的逐条恢复。但是,这也意味着在相同的数据量下,AOF文件的大小通常会比RDB文件大,并且加载AOF文件以恢复数据的过程可能比RDB慢。

AOF的工作流程

Redis的AOF持久化工作流程涉及到命令的写入、缓冲、同步以及文件的重写等关键步骤

开启AOF:需要在Redis配置文件中将appendonly选项设置为yes以启用AOF持久化。AOF文件名默认为appendonly.aof,但可以通过appendfilename参数进行设置,而文件存储的目录可以通过dir参数配置。

命令写入AOF缓冲区:当客户端发送写操作时,这些操作首先会被追加到服务器端的AOF缓冲区(aof_buf)中。这样做可以在一定程度上提高性能,因为写操作首先在内存中完成,而不是直接写入磁盘。

文件同步:根据配置的写入策略,如alwayseverysecno,系统会定期或在每次写操作后将缓冲区中的数据同步到AOF文件中。这个同步过程确保了数据的持久化。

缓冲区写回策略:AOF持久化提供了多种缓冲区写回策略,包括始终将数据立即写入磁盘的策略,以及每秒写入一次或由操作系统决定何时写入的策略。这些策略在保证数据安全性的同时,也考虑了性能的影响。

AOF文件重写:为了优化AOF文件的大小和效率,Redis会定期进行AOF文件重写。重写过程中,Redis会创建一个新的AOF文件,仅包含恢复当前数据集所需的最小命令集,从而减少文件的大小并提高加载速度。

重启加载:Redis 服务器重启可以对AOF文件加载进行数据恢复。

RDB和AOF如何选择

在选择Redis的持久化方式时,通常建议结合使用AOF和RDB以达到最佳的数据安全性和恢复速度

数据安全性:AOF通过记录每个写操作来提供更高的数据安全性,因为它能够保证在系统崩溃后不会丢失最近的操作。而RDB在某个时间点提供数据的快照,可能会丢失最后一次快照之后的所有数据。

恢复速度:RDB的恢复速度通常比AOF更快,因为它只需要加载单个压缩的二进制文件。但如果同时使用AOF和RDB,Redis会优先使用AOF来恢复数据,因为AOF保存的文件更完整。

性能影响:AOF在写入时可能会对性能产生一定影响,尤其是在重写过程中。使用everysec策略可以在一定程度上平衡可靠性和性能。RDB的性能影响主要发生在创建快照时,但这可以通过配置自动触发时间和手动触发来控制。

用例场景:如果数据不是非常敏感,可以从其他地方重新生成,那么可以选择关闭持久化。如果数据比较重要但能够承受几分钟的数据丢失(如缓存),可以只使用RDB。对于需要高数据完整性的场景,建议同时开启AOF和RDB。

存储空间:AOF文件通常会比RDB文件大,因为它记录了每个写命令。存储空间的限制也可能影响持久化方式的选择。

维护和管理:AOF文件可能需要定期进行重写以避免过大,而RDB的维护相对简单,因为它只需要在某些策略下自动或手动触发快照。

标签:AOF,持久,文件,Redis,RDB,数据
From: https://blog.csdn.net/m0_59166601/article/details/136858090

相关文章

  • Redis 梳理
    基础知识NoSQLNoSQL(NotOnlySQL),泛指非关系型数据库。为了解决大规模数据几何多重数据种类带来的挑战,尤其是大数据应用,包括超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向发展。易扩展NoSQL数据库种类繁多,但是一个共同的特点都是去掉关......
  • 瑞_Redis_短信登录
    文章目录项目介绍1短信登录1.1项目准备1.1.1导入SQL1.1.2导入后端项目1.1.3导入前端项目1.2基于Session实现登录流程1.2.1功能流程介绍1.2.1.1发送短信验证码1.2.1.2短信验证码登录、注册1.2.1.3校验登录状态1.2.2实现发送短信验证码功能1.2.2.1页面流程1.......
  • Garnet: 力压Redis的C#高性能分布式存储数据库
    今天看到微软研究院开源了一个新的C#项目,叫Garnet,它实现了Redis协议,可以直接将Redis替换为Garnet,客户端不需要任何修改。根据其官网的信息,简单的介绍一下它。开源仓库地址:https://github.com/microsoft/garnet文档地址:https://microsoft.github.io/garnet/Garnet是微软研究院基......
  • 鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业
    随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本,提高招投标工作的公开性和透明性,并确保符合国家电子招投标......
  • redis查询端口与密码以及连通性测试方法
    目录一.端口查找二.密码查找三.连通性测试前言:redis的配置信息都在redis.conf文件里面,可以通过find/-nameredis.conf 进行查找文件存放位置,然后进入redis.conf文件进行查看一.端口查找1.使用命令 ps-ef|grepredis进行查找,示例6450/6451均为redis......
  • redis自学(21)信号驱动IO和异步IO
    信号驱动IO信号驱动IO是与内核建立SIGIO的信号关联并设置回调,当内核有FD就绪时,会发出SIGIO信号通知用户,期间用户应用可以执行其它业务,无需阻塞等待  缺点:当有大量IO操作时,信号较多,SIGIO处理函数不能及时处理可能导致信号队列溢出而且内核空间与用户空间的频繁信号交互性......
  • Garnet发布 Redis不再是唯一选择
    Garnet是MicrosoftResearch的远程缓存存储,提供强大的性能(吞吐量和延迟)、可扩展性、存储、恢复、集群分片、密钥迁移和复制功能。Garnet可以与现有的Redis客户端配合使用。Garnet是MicrosoftResearch推出的一种新型远程缓存存储,具有多种独特优势:Garnet采用流行的......
  • 好用的Redis 客户端工具有几个? 这里推荐两三个
    微信公众号:数据库杂记   个人微信: iiihero我是iihero. 也可以叫我Sean.iihero@CSDN(https://blog.csdn.net/iihero) Sean@墨天轮 (https://www.modb.pro/u/16258)数据库领域的资深爱好者一枚。水木早期数据库论坛发起人 db2@smth,早期多年水木论坛数据库版版主。......
  • # Docker安装使用Redis
    拉取最新版本redisdockerpullredis:7.2.4查看镜像dockerimages新建本地挂载配置文件夹(位置随意)1、创建文件夹(位置随意):data、confredis默认配置只能够本地连接、不能进行远程访问需要手动挂载redis配置文件mkdir-p/docker-root/redis_6379/datamkdir-p/d......
  • Redis第三弹,定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对
    目录定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对应的数据类型)redis的数据类型hsetkeyfieldvalue(这里是使用hash作为数据结构)小结定时删除redis并未实现定时器的方式,实现定时器的方式,实现过期key删除,若多个key过期,也可通过一个......