4、Redis的 RDB 和 AOF两种持久化机制的优劣对比

Redis的持久化机制包括RDB和AOF,两者各有优劣。RDB在数据一致性上有优势,适合长期保存,恢复速度快;AOF则能保证数据的安全性,即使服务器宕机也能恢复。AOF的恢复速度相对较慢,但能记录所有操作,适合快速恢复。在实际应用中,通常结合使用RDB和AOF以平衡性能和安全性。
摘要由CSDN通过智能技术生成

Redis (Large Data Ring)是一个高效的数据备份、恢复及重分布引擎,它将存储引擎(Storage Engine)、持久化引擎(Redis Data Engine)及其它辅助功能集合在一起。Redis为其客户提供了一系列强大的功能和命令来处理各种复杂的数据结构与数据操作。

Redis的 RDB 和 AOF两种持久化机制的优劣对比

一、原理

RDB文件是以主从同步模式写入磁盘的,将数据文件分成多个块,每块大小为1 MB,以便于数据的碎片化和持久化。

RDB的数据是由主节点进行定时备份到 RDB文件中的,这样在主节点关机或者因为网络问题无法通信时,可以利用备份数据继续工作,从而保证了数据的可用性。

AOF文件是通过复制方式来保存数据的,在复制时会将所有记录进行备份,备份数据是不会有任何变化的。

Redis使用的 RDB和 AOF技术都是由主节点来进行持久化操作,这样做的好处是保证了 Redis本身对持久化操作的原子性,减少了客户端和服务器之间进行频繁同步的开销。

RDB (Reduce-random binary):将完整的文件碎片按大小压缩成4K+16M大小并保存在内存中(这也是 RDB文件名中会有一个R),每隔一定时间(一般为10分钟)对其进行一次完整版本的数据备份。

RDB是在主从复制模式下执行备份操作的,主节点执行了备份操作之后将会将其保存到 RDB文件中。

AOF (Align Object Range):将完整的数据文件拆分成多个数据块并分别保存到多个 RDB文件中(这也是 AOF模式下执行备份操作时会将每一个文件都进行复制,从而保证了数据有多个副本)。

AOF (Align Object Range):将完整版本的数据块按大小压缩到一个 RDB文件中,然后在一个 RDB文件中存放每一个小块数据,再将每个小块数据压缩到一个 AOF文件中。

持久化模式

  • RDB:日志型持久化,后的数据是以文件格式保存的,需要指定文件的路径才可以访问,比如以 source/key/data等形式保存。
  • RDB和 AOF是 Redis提供的两种持久化模式,其目的都是为了实现数据丢失后的数据恢复。
  • RDB: Redis实现了基于文件保存方式实现了对数据的持久化, RDB方式是通过一个 rdb文件来保存数据。

RDB模式:

  1. 提供一个 rdb/log文件来保存数据,记录了数据在内存中的所有操作过程。RDB方式可以提供非常高的恢复速度,但是不能保证数据完全一致,因为每次操作都会对 Redis中的内存空间进行一次扫描。
  2. AOF:通过配置文件来打开 AOF文件,同时打开 AOF日志,就可以看到执行过程中所有操作
  3. 在 Redis. log中可以记录哪些操作导致了数据丢失
  4. 如果 rollback出现了问题,这个时候需要从内存中找到持久化的数据
  5. 当 redis出现故障或者重启时
  6. redis恢复时会重新初始化一次集群,这个时候 redis会丢失一部分数据
  7. 当 redis重启时需要恢复到初始化前的状态

二、安全性

RDB: RDB持久化机制通过配置文件来设置参数,开启了文件写缓存后,机器在没有数据操作的情况下,也可以继续持久化数据。而如果 RDB的配置文件不正确或者配置了一些不合适的参数,机器在写入数据时会丢失一些数据。但是,只要配置文件正确就可以避免 RDB持久化过程中出现的错误

AOF: AOF机制是通过对 Redis文件进行定时备份,一旦命令执行之后,就会将文件写入内存中,然后 Redis将会释放内存中的文件数据。这意味着在 AOF持久化机制下,即使机器运行中出现问题(如死机)也不会丢失数据,因此 AOF持久化机制相对来说安全性更高。但是,对于不同的 Redis客户端来说,其对于数据安全的要求是不一样的

如果使用 AOF机制(例如 MemcachedAOF)进行数据备份就必须关闭其持久化过程中写缓存的功能,在这种情况下就会导致机器上的所有数据都丢失。为了防止这种情况的发生,我们可以使用 RDB机制来实现更好的安全性:

  • RDB持久化机制在每次写操作(比如 RDB命令执行过程中)之后都会将内存中文件内容写入内存中
  • 由于 AOF机制不能对 Redis的配置文件进行操作(不支持保存配置文件)所以无法进行备份(也就是无法恢复数据)
  • 通过使用不同的 redis命令来实现对同一个 Redis实例进行操作,使用不同的 redis命令来实现对 Redis实例进行操作,也就是可以在 redis实例上分别运行不同的命令来实现不同操作

三、恢复速度

RDB: RDB持久化机制是采用压缩文件的方式,保存为一个临时的文件,临时文件将保存在磁盘上,当数据写入磁盘后, RDB持久化机制就会删除临时文件,那么在任何时候都可以直接读取 RDB文件中的数据,这样可以大幅缩短恢复时间

RDB持久化机制可以适用于大多数的系统环境。
AOF: AOF持久化机制采用压缩方式,保存为一个二进制文件,该文件将保存数据的顺序打乱重新进行排序,同时进行了压缩。
数据在恢复时需要进行二次排序,这样就会导致恢复时间增加。
但是对于某些用户来说,当数据量不是很大时,还是可以接受的。

RDB: RDB持久化机制是将文件分块存储到多个磁盘上,使用 rdb命令在磁盘上将文件切分为多个小块来存储(一个完整的 RDB文件头、文件主体和子文件)。
RDB持久化机制在数据写入时是顺序写入的,可以快速恢复出原有数据;当 RDB持久化机制有数据丢失时,可以通过回滚来快速恢复数据;当 RDB持久化机制出现异常无法正常使用时,还可以通过 AOF方式来恢复。
AOF: AOF是通过 AOF日志文件来记录数据的变化过程。

四、使用场景

  1. RDB文件保存时间较长,适合长期保存数据,例如:
    数据集大时(百万级或以上的数据集),可以将多个 RDB文件进行组合以提供更多的功能;
    某些工作中需要保存大量数据,例如:
    (1)数据集较大时(千万级以上数据集)
    (2)某些业务的持久化需求(如:系统升级或更新,用户登陆列表等)

  2. AOF文件保存时间较短,适合快速恢复:
    AOF文件存储的方式更适合在临时文件中保存临时数据,在需要恢复时可以通过将临时文件进行 AOF重做恢复。需要注意的是,如果将临时文件保存时间较长,导致 AOF重写后无法恢复

  3. RDB文件需要定期进行快照,适合临时数据集较多的场景:

    1. Redis需要频繁加载 RDB文件,以便每次访问都能进行持久化。但由于 RDB的大小固定(5 MB左右),在用户不操作的情况下系统会自动清理掉大量数据
    2. RDB的读取速度快,在用户不操作的情况下,可以在后台进行 RDB读取。但是 AOF却不能通过这种方式进行持久化。因为 AOF有一个默认的时间戳:在其所在的时间点上读取数据都是有效的
  4. 如果客户在某一时刻进行操作后系统不再向 RDB文件写入新数据,此时可以使用 AOF来恢复数据。因为 AOF可以通过设置一个时间点来进行恢复。该时间点以后系统将不再向 RDB文件写入数据(AOF自动完成)

  5. AOF文件保存方式可以提供更多的功能,例如:

    1. 只保存最近一次查询结果的页面;

五、总结

RDB与 AOF,这两种持久化方式都是以保存数据库数据为中心,都是在数据库发生故障时使用。

RDB持久化方式的优点在于它将数据完整的保存了下来,使得数据不会因为一些硬件故障而丢失,同时它也保证了数据的一致性。

缺点在于如果不设置 RDB持久化配置文件,那么即使发生了数据丢失的情况,它也只能通过人工将数据恢复到数据库之前的状态。

而 AOF持久化方式就不存在这个问题了,因为 AOF持久化方式可以保证数据的一致性。

另外从安全性角度来看 RDB持久化方式比 AOF更安全,因为 RDB将所有的数据都保存到了内存中,即使发生故障导致服务器宕机,它也可以通过重启服务器来恢复之前的状态。

而 AOF则不一定能做到这点,因为 AOF是将数据库中所有的记录都保存到了内存中。

如果服务器宕机则会导致查询出的所有记录都无法恢复。

在实际使用中我们通常采用 RDB+ AOF来作为数据库的持久化方案。

RDB+ AOF都是采用主从同步机制进行持久化操作的,主从同步机制为 Redis提供了高可用、高可靠、高性能以及扩展性强等特性。

主从同步机制通过增加一个客户端来实现,主要用于在主库出现故障时提供备用恢复功能。

主从同步机制是一个简单但有效的技术,其可被应用到 Redis数据库中任何需要用到数据持久化技术的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个昵称不容易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值