Redis持久化AOF和RDB的详细阐述

一、Redis持久化AOF和RDB的区别

Redis持久化AOF和RDB都是Redis的持久化机制,但它们的实现方式、特点和适用场景都不同。

RDB是指Redis Database,在指定的时间间隔内将内存中的数据集快照写入磁盘。RDB采用一种压缩格式将当前进程数据状态写入磁盘。它避免了AOF中的多次写入操作,保证了数据的实时性与可靠性,同时还能节省磁盘空间和写入时间。但因为只保存Redis在某个时间点上的数据状态,如果在该时间点之后出现宕机,那么此时数据就无法恢复了。

AOF是指Append Only File,其具有持久化更新的特点,每秒钟将执行过的命令追加到名为appendonly.aof的文件中,以此来记录Redis的操作。在数据备份方面,AOF提供了更加可靠的数据备份,对于需要数据完整性的场合尤其重要。但同时也使得AOF文件的大小比RDB文件更大,每秒钟追加操作会对磁盘I/O产生巨大影响。


#RDB持久化
save 900 1         #900秒内进行过一次写入操作,就自动备份
save 300 10        #300秒内进行过10次写入操作,就自动备份
save 60 10000      #60秒内进行过10000次写入操作,就自动备份
 
#AOF持久化
appendonly yes     #开启AOF持久化
appendfilename "appendonly.aof"   #AOF文件名

二、Redis持久化AOF和RDB混合使用

Redis官方推荐AOF和RDB相结合的方式进行持久化,以充分发挥它们各自的优势。

当Redis关机时,首先会检测AOF文件是否存在,若存在,则会根据AOF文件重新构建数据库,因为AOF的数据一般比RDB的数据完整性更高。如果AOF文件不存在或者AOF文件损坏,Redis会检查是否存在RDB快照,如果存在,则会将RDB的数据加载到内存中。

当Redis运行时,通过设置redis.conf中的aof-use-rdb-preamble yes,使得在AOF重写过程中,写入一条磁盘快照信息(RDB Header) ,这样在AOF 文件重写恢复时,会使用磁盘快照中的数据替换原有 RDB文件载入的数据,这种方式克服了 AOF文件中数据可能不完整的问题。


aof-use-rdb-preamble yes  #重写AOF文件同时写入RDB文件的内容

三、Redis持久化RDB和AOF

Redis官方提供了两种Redis数据持久化的方式:

(1)RDB快照:以指定间隔时间异步地将内存中的数据写入到硬盘中,遵循“写时复制”的策略,过程中不会停止数据库的服务,且持久化的文件名为 dump.rdb。RDB的优点是实现简单,占用资源小且数据更加的紧凑,但缺点是无法保留持久化期间的状态。

(2)AOF日志:以追加的方式将服务器执行的命令写入到日志文件中去。当Redis重启时,将根据日志文件中的命令重新执行一遍,从而达到恢复数据的目的。AOF的优点是能够非常可靠的保证数据的完整性,但其缺点是占用空间大,重启速度慢等问题。


#RDB持久化
save 900 1         #900秒内进行过一次写入操作,就自动备份
save 300 10        #300秒内进行过10次写入操作,就自动备份
save 60 10000      #60秒内进行过10000次写入操作,就自动备份
 
#AOF持久化
appendonly yes     #开启AOF持久化
appendfilename "appendonly.aof"   #AOF文件名

四、Redis数据库数据持久化有哪些方式

除了上述提到的RDB和AOF,Redis数据库还有以下几种持久化方式:

(1)无持久化:默认情况下Redis并不使用任何形式的持久化,仅仅依靠内存来保存数据。当Redis重启时,所有数据都将丢失。

(2)只使用RDB:将持久化方式设置为“只使用RDB”的情况下,Redis不会在任何时候将数据写入到AOF文件中,仅通过RDB将内存中的数据库状态保存下来。

(3)只使用AOF:将持久化方式设置为“只使用AOF”的情况下,Redis只会将执行的写操作记录到AOF文件中,而不是存储在内存里。在Redis重启的情况下,可以根据AOF文件中的记录来重构整个数据库,以恢复写操作的状态。

(4)RDB和AOF混合使用:Redis建议将持久化方式设置为“RDB和AOF的混合使用”,这样Redis可以同时获得二者的优点,具有较高的数据完整性和高效的性能表现。


#设置持久化方式为RDB
save ""

#设置持久化方式为AOF
appendonly yes

#设置持久化方式为RDB和AOF混合使用
save 900 1         #900秒内进行过一次写入操作,就自动备份
save 300 10        #300秒内进行过10次写入操作,就自动备份
save 60 10000      #60秒内进行过10000次写入操作,就自动备份
appendonly yes
appendfilename "appendonly.aof"

五、Redis持久化AOF

AOF(Archiver on File)是一种持久化策略,将Redis的命令追加到磁盘上的AOF文件中。目标是使用AOF文件记录所有的写操作(读操作不会记录),并通过读取AOF文件来完成数据恢复。

配置Redis将AOF保持在何时重写初始文件中,Redis使用AOF文件记录每个写命令,并以append(附加)方式将所有数据写入AOF文件中。AOF默认情况下以同步的方式工作,这意味着每个Redis写命令将被同步写到硬盘。这种方式通常是非常慢的,并且特别容易导致数据丢失.

Redis AOF提供了两种不同的写入策略,以解决上述同步写入的性能问题:

1. always:Redis在每个写操作后同步AOF文件。

2. everysec:Redis在每秒同步AOF文件以避免过多的操作系统调用。


#默认以always方式进行AOF持久化
appendfsync always

#设置以everysec方式进行AOF持久化
appendfsync everysec

六、Redis AOF

Redis AOF并不是Redis的独立成员,它仅仅是关键的数据持久化策略之一。Redis通过不同的配置选项,使操作人员能够找到最佳的Redis数据持久化策略。

启用AOF:默认情况下Redis使用no将AOF禁用,必须启用才能使用AOF数据持久化功能


appendonly yes

七、Redis的持久化

Redis持久化是保证Redis数据可靠性的一种方式,同时避免因为进程意外终止等原因造成数据的丢失。Redis将当前内存中的数据状态写入到磁盘上,并在Redis重启时能够通过载入磁盘数据重新构建内存中的数据库状态,以达到持久化目的。


#开启RDB持久化
save 900 1         
save 300 10        
save 60 10000      
 
#开启AOF持久化
appendfsync always   

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/233586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 17:09
下一篇 2024-12-11 17:09

相关推荐

  • 在CentOS上安装Redis

    Redis是一款非关系型数据库,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。Redis运行内存内并且支持数据持久化,它还可以应用于缓存、消息队列等场景。本文将介绍…

    编程 2025-04-28
  • ORM持久层

    ORM(对象关系映射)是一种编程技术,它将面向对象的编程语言中的对象与关系型数据库中的表进行映射。通过ORM,我们可以用面向对象的方式操作数据库,减少了手写SQL语句的复杂度以及对…

    编程 2025-04-28
  • 解析spring.redis.cluster.max-redirects参数

    本文将围绕spring.redis.cluster.max-redirects参数进行详细阐述,从多个方面解读它的意义与作用,并给出相应的代码示例。 一、基础概念 在介绍sprin…

    编程 2025-04-27
  • Redis Bitmap用法介绍

    Redis是一款高性能的内存数据库,支持多种数据类型,其中之一便是bitmap。Redis bitmap(位图)是一种用二进制位来表示元素是否在集合中的数据结构。由于使用了二进制位…

    编程 2025-04-27
  • Java持久层框架的复合主键实现

    用Java持久层框架来操作数据库时,复合主键是常见的需求。这篇文章将详细阐述javax.persistence复合主键的实现方式,并提供完整的示例代码。 一、复合主键的定义 复合主…

    编程 2025-04-27
  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25

发表回复

登录后才能评论