Redis 持久化
目录
Redis 持久化
持久性是指将数据写入持久存储,例如固态磁盘 (SSD)。Redis 提供了一系列持久性选项。这些包括:
RDB:以指定的时间间隔执行数据集的时间点快照。AOF:记录服务器接收到的每个写操作。然后可以在服务器启动时再次重播这些操作,从而重建原始数据集。RDB+AOF:组合 AOF 和 RDB。
RDB
优点
- RDB 是 Redis 数据的非常紧凑的单文件时间点表示形式。RDB 文件非常适合备份。
- 与 AOF 相比,RDB 允许更快地重新启动大数据集
- 在副本上,RDB 支持重启和故障转移后的部分重新同步
缺点
- Redis 异常例如断电后,最新数据可能丢失
- RDB 需要经常 fork() 才能使用子进程持久保存在磁盘上。如果数据集很大,fork() 可能会非常耗时,并且如果数据集很大并且 CPU 性能不是很好,可能会导致 Redis 停止为客户端提供服务几毫秒甚至一秒。AOF 还需要 fork() 但频率较低,您可以调整重写日志的频率,而无需牺牲持久性。
AOF
优点
- 使用 AOF Redis 更加耐用, 基于不同的 fsync 策略:根本不进行 fsync、每秒进行 fsync、每次查询时进行 fsync。采用每秒 fsync 的默认策略,写入性能仍然很棒。fsync 是使用后台线程执行的,当没有 fsync 正在进行时,主线程将努力执行写入,因此您只能丢失一秒钟的写入。
- AOF 日志是仅追加日志,因此不会出现查找问题,并且在断电时也不会出现损坏问题。
- 当 AOF 太大时,Redis 能够在后台自动重写 AOF.
- AOF 以一种易于理解和解析的格式依次包含所有操作的日志。您甚至可以轻松导出 AOF 文件。例如,即使您不小心使用该FLUSHALL命令刷新了所有内容,只要在此期间没有执行日志重写,您仍然可以通过停止服务器、删除最新命令并再次重新启动 Redis 来保存数据集。
缺点
- 对于相同的数据集,AOF 文件通常比等效的 RDB 文件大。
- AOF 可能比 RDB 慢,具体取决于确切的 fsync 策略。一般来说,将 fsync 设置为每秒一次的性能仍然非常高,并且禁用 fsync 后,即使在高负载下,它也应该与 RDB 一样快