您的位置:

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