MST

星途 面试题库

面试题:缓存设计:RDB与AOF的性能与恢复对比

在高并发写入场景下,RDB和AOF对Redis性能的影响有何不同?当Redis出现故障需要恢复数据时,RDB和AOF在恢复速度和数据完整性方面各自有哪些优缺点?
18.1万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

高并发写入场景下对Redis性能的影响

  • RDB
    • 优点:RDB是快照形式,在高并发写入时,由于是定期或手动触发生成快照,对写入性能基本无影响。因为它不会每次写入操作都进行持久化相关的I/O操作。
    • 缺点:在生成RDB快照文件时,尤其是大数据量时,可能会fork出子进程来进行数据持久化,这个fork操作可能会阻塞主线程一小段时间,影响高并发写入场景下的响应及时性。
  • AOF
    • 优点:AOF是追加日志形式,通常情况下,对写入性能影响较小,因为它是追加写,而不是像RDB那样需要一次性生成整个快照。
    • 缺点:在高并发写入时,如果采用always同步策略(即每次写入操作都同步到磁盘),会有频繁的I/O操作,严重影响性能;如果采用everysec策略(每秒同步一次),虽然性能有所提升,但在这一秒内如果发生故障,还是会丢失一秒内的数据;采用no策略(由操作系统决定何时同步),性能最高,但数据丢失风险也最大。

故障恢复时的优缺点

  • RDB恢复速度
    • 优点:恢复速度快。因为RDB是一个紧凑的二进制快照文件,恢复时直接将文件读入内存即可,数据量较小且结构简单,加载速度相对较快。
    • 缺点:由于RDB是定期或手动触发快照,所以如果距离上一次快照时间较久,在故障恢复时会丢失这段时间内的数据。
  • RDB数据完整性
    • 优点:因为RDB是基于某个时间点的完整数据快照,恢复的数据在结构上是完整的,不会出现数据冗余或错误记录(前提是快照生成时无错误)。
    • 缺点:无法保证数据的最新性,会丢失上次快照之后的所有写入操作数据,数据完整性依赖于快照周期设置。
  • AOF恢复速度
    • 优点:恢复数据时,AOF日志记录了所有的写操作,只要日志文件没有损坏,就能通过重放日志恢复到故障前尽可能近的状态,数据丢失较少。
    • 缺点:恢复速度相对RDB较慢。因为需要重放AOF日志中的所有写操作,日志量较大时,重放操作耗时较长。
  • AOF数据完整性
    • 优点:如果采用alwayseverysec同步策略,相比RDB能保证更高的数据完整性,丢失的数据较少。
    • 缺点:如果采用no同步策略,可能丢失大量数据;另外,由于AOF是追加写日志,可能会存在冗余的操作记录,虽然可以通过重写机制优化,但在重写之前,日志文件可能会较大,影响恢复速度和占用磁盘空间。