Redis持久化RDB和AOF实现原理

Redis持久化RDB和AOF

为什么Redis需要持久化?
因为Redis属于内存型数据库,数据是储存在内存当中的,当遇到不可抗力因素,比如断电,那么储存在内存中的数据就会丢失。所以为了保证数据的完整性,我们需要做持久化操作,来保证数据的完整性。

Redis中都有哪些持久化机制?
Redis早就考虑到了这一点,所以在Redis中,为我们准备了两种持久化的机制,RDB和AOF。
既然Redis为我们提供了两种持久化的机制,那我们到底该选用哪个呢?其实啊,在Redis配置文件中RDB这种机制是默认开启的,而AOF机制是默认关闭的,也就是说如果你不进行配置,那么Redis就默认你使用了RDB这种持久化的机制。而当你开启AOF机制,那么Redis就会优先使用AOF持久化机制来进行数据的持久化操作。

下面我们来了解一下什么是RDB,什么又是AOF。

RDB(Redis Database):

RDB是Redis用来持久化的一种机制,是把当前内存中的数据集快照写进磁盘中。

上篇博客中提到过,在redis.conf配置文件中有一个叫做SNAPSHOTTING的配置模块,在里面我们可以看到有save 900 1 ,save 300 10 , save 60 10000。这里的save配置的是触发持久化操作的条件,save 900 1就是指在900秒内至少有一个key发生了改变,那么我就执行持久化操作,同理save 300 10 , save 60 10000也是指在300秒/60秒内有至少10/10000个key发生了改变就进行持久化操作。

在这里插入图片描述
当目前的数据修改达到我们配置的save条件之后,Redis就会将内存中的数据保存在dump.rdb(默认是dump.rdb,当然这个也可以在配置文件中进行更改)中。当Redis突然宕机重新启动的时候,Redis会读取dump.rdb文件中的数据加载到内存当中,很好的保证了数据的完整性。

RDB优点:

  • RDB在执行写操作时是通过从主进程里fork的子进程进行的写入的,能够很好的保证Redis的性能不会受到太大影响。
  • 和AOF机制相比,RDB是通过dump.rdb文件来进行恢复数据的,效率更佳。

RDB缺点:

  • 即使配置了save 1 1也有可能在1秒之内发生了突发事件导致服务崩溃,进而丢失那一秒钟的数据,适合对数据完整性要求不高的情况下开启此机制。

AOF(Append Only File):

Redis是默认关闭AOF机制的,他是通过记录我们操作的命令来达到数据持久化操作的目的的。
我们可以在配置文件中把他打开appendonly yes(开启AOF机制)

AOF会把我们执行的命令一条一条追加到文件中的,那么可想而知,随着命令越来越多,那么保存的文件就会越来越大,当文件达到我们配置的一个空间的时候,Redis就会通过BGREWRITEAOF命令来对AOF日志文件进行重写。

1auto-aof-rewrite-percentage 100 #AOF文件大小超过上次重写时文件大小的百分之几开始重写,如果之前没有写过,则根据启动时文件大小。 2auto-aof-rewrite-min-size 64mb #允许重写的最小占用空间

同步策略可以通过以下进行配置:

1appendfsync always #当有命令执行时就同步到AOF文件中 2appendfsync everysec #每隔1秒同步一次 3appendfsync no #不同步

当AOF和RDB同时开启时Redis是如何决定使用哪种机制的呢?
在这里插入图片描述
Redis启动时会读取配置文件,先去检查AOF是否开启,如果开启则加载AOF文件到内存中并启动成功,若AOF没有开启,则去加载RDB文件到内存中并启动成功。

AOF优点:

  • AOF文件通过追加的方式写入,所以不用进行内存寻址,写入效率高。
  • AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。因为在rewritelog的时候,会对其中的指导进行压缩,创建出一份需要恢复数据的最小日志出来。再创建新日志文件的时候,老的日志文件还是照常写入。当新的merge后的日志文件ready的时候,再交换新老日志文件即可。

AOF缺点:

  • 同RDB一样,当设置AOF同步策略为everysec时,最多也是每秒执行一次同步,有可能会丢失一秒的数据,但当同步策略设置为always虽然能防止数据的丢失,同时也付出了性能的代价,二则不可兼得。
  • 对于相同的数据,AOF文件比RDB文件更占用空间。
点赞
收藏

评论区

加载中...

相关推荐

10分钟彻底理解Redis持久化和主从复制

在这篇文章,我们一起了解Redis使用中非常重要的两个机制:Reids持久化和主从复制。什么是Redis持久化?Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示!(https://oscimg.oschina.net/oscnet/up4a1b1b7

NoSQL数据库Redis和MongoDB

redis简介一些特点:Redis的读写性能极高,并且有丰富的特性(发布/订阅、事务、通知等)。Redis支持数据的持久化(RDB和AOF两种方式),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis支持多种数据类型,包括:string、hash、list、set,zset、bitm

051. Redis 持久化机制

1\.持久化介绍Redis的数据存在在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。!image20200511165351687(https://oscimg.oschina.net/os

051. Redis 持久化机制

1\.持久化介绍Redis的数据存在在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。!image20200511165351687(https://oscimg.oschina.net/os

Redis——持久化数据

Redis被称为是内存数据库,那是因为它会将其所有数据存储在内存里,因此Redis具有强劲的速度性能,但是,也正因为数据存储在内存中,当Redis重启后,所有存储在内存的数据就会丢失。为了使得数据持久化,Redis提供了两种方式:RDB方式和AOF方式。一、RDB方式RDB方式的持久化是通过快照(snapshotting)完成的,

Redis—持久化

一、持久化简介Redis的数据全部存储在内存中,如果突然宕机,数据就会全部丢失,因此必须有一套机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制,它会将内存中的数据库状态保存到磁盘中。持久化发生了什么|从内存到磁盘