面试常问的 RDB 和 AOF 的优缺点

RDB 和 AOF 的优缺点

RDB 的优点:1、体积更小;2、恢复更快;3、性能更高。RDB 的缺点:1、故障丢失;2、耐久性差。AOF 的优点:1、数据保证;2、自动缩小。AOF 的缺点:1、性能相对较差;2、体积相对更大;3、恢复速度更慢。其中,RDB 体积更小是指相同的数据量 RDB 数据比 AOF 的小,因为 RDB 是紧凑型文件。

一、RDB 的优点
  1. 体积更小:相同的数据量 RDB 数据比 AOF 的小,因为 RDB 是紧凑型文件。
  2. 恢复更快:因为 RDB 是数据的快照,基本上就是数据的复制,不用重新读取再写入内存。
  3. 性能更高:父进程在保存 RDB 时候只需要fork一个子进程,无需父进程的进行其他io操作,也保证了服务器的性能。
二、RDB 的缺点
  1. 故障丢失:因为 RDB 是全量的,我们一般是使用shell脚本实现30分钟或者1小时或者每天对 Redis 进行 RDB 备份,(注,也可以是用自带的策略),但是最少也要5分钟进行一次的备份,所以当服务死掉后,最少也要丢失5分钟的数据。
  2. 耐久性差:相对 AOF 的异步策略来说,因为 RDB 的复制是全量的,即使是 fork 的子进程来进行备份,当数据量很大的时候对磁盘的消耗也是不可忽视的,尤其在访问量很高的时候,主线程 fork 的时间也会延长,导致 cpu 吃紧,耐久性相对较差。
三、AOF 的优点
  1. 数据保证:我们可以设置fsync策略,一般默认是 Everysec,也可以设置每次写入追加,所以即使服务死掉了,也最多丢失一秒数据
  2. 自动缩小:当 AOF 文件大小到达一定程度的时候,后台会自动的去执行 AOF 重写,此过程不会影响主进程,重写完成后,新的写入将会写到新的 AOF 中,旧的就会被删除掉。但是此条如果拿出来对比 RDB 的话还是没有必要算成优点,只是官网显示成优点而已。
四、AOF 的缺点
  1. 性能相对较差:它的操作模式决定了它会对 Redis 的性能有所损耗。(主线程写文档)
  2. 体积相对更大:尽管是将 AOF 文件重写了,但是毕竟是操作过程和操作结果仍然有很大的差别,体积也毋庸置疑的更大。
  3. 恢复速度更慢:AOF 在过去曾经发生过这样的 bug : 因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的。
五、RDB 和 AOF 的混合模式

在两次快照中间使用日志,第二次快照完成之后日志就可以清除以便下次使用,这样不会存在 AOF 文件过大的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis的RDBAOF是两种不同的持久化机制。RDB全称Redis Database Backup file,它是将内存中的所有数据记录在磁盘上的快照文件。当Redis实例故障重启后,可以从磁盘中的RDB文件读取数据来进行恢复。RDB文件默认保存在当前运行目录,每次触发RDB时会生成一个新的RDB文件来覆盖旧文件,以保证备份数据的最新性。 AOF全称Append Only File,它是将Redis的操作以日志的形式追加到文件中。AOF文件的保存路径与RDB的路径一致。如果同时开启了RDBAOF,Redis会优先根据AOF文件来进行数据恢复。 RDBAOF的目的都是为了将Redis中的数据持久化到磁盘中,以防止数据丢失。因为Redis中的数据是基于内存的,一旦服务器断电或宕机,数据就会直接丢失。通过使用RDBAOF,可以在Redis实例故障重启后,根据备份文件进行数据恢复。 总结来说,RDB是将内存中的数据直接拷贝到文件中的持久化方式,而AOF是将Redis的操作以日志的形式追加到文件中的持久化方式。根据配置的不同,可以选择使用RDBAOF或同时使用两者来实现数据持久化。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *4* [详解Redis的RDBAOF](https://blog.csdn.net/u014225032/article/details/125856164)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis持久化的两种方式:RDBAOF(详解)](https://blog.csdn.net/starboyxyh/article/details/127503310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值