redis中的持久化操作AOF与RDB区别

通过阅读Redis官网:

持久性:是指将数据写入持久存储,例如固态磁盘 (SSD)

包括:

  1. RDB(Redis数据库):RDB持久性按指定的时间间隔执行数据集的时间点快照
  2. AOF (仅追加文件):AOF持久性记录服务器收到的每个写入操作。然后可以在服务器启动时重建原始数据集。命令的记录格式与Redis协议本身相同
  3. RDB + AOF :顾名思义可以在同一个实例中组合AOF和RDB

RDB

优点:

  1. 可以设置时间间隔进行存档,快照保存30天,在发生灾难时还原数据集。
  2. RDB最大限度提高Redis性能,父进程会开启一个子进程去完成磁盘I/O操作

缺点:

  1. 如果redis服务器停止(停电),RDB模式由于是时间间隔拍摄快照,因此会丢失最后几分钟的数据
  2. 由于RDB性能提升是提高是提高fork() { fork()函数的解释:操作UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。} 如果数据集很大,则fork函数很耗时间,并且CPU性能不够,会导致Redis停止提供服务几毫秒甚至一秒。AOF也需要fork(),但频率低。可以调整重写日志的频率,减少开销。

AOF

优点:

  1. AOF是通过**(fsync函数文件数据同步到硬盘)**。fsync是使用后台线程执行的,当没有fsync正在进行时,主线程将执行写入,因此您只能丢失一秒钟的写入。
  2. AOF是仅追加日志,因此再短电时不会有寻道或损坏问题,redis-check-aof工具可以修复它
  3. 当Redis继续追加到旧文件时(AOF文件变得太大时会重写文件),会使用创建当前数据集所需的最少操作集生成一个全新的文件,一旦第二个文件准备就绪,Redis就会切换两者并开始追加到新文件。
  4. 只要没有重写AOF日志文件,就能重新启动Redis保存数据集

缺点:

  1. AOF文件文件大小大于同一数据集等效RDB文件
  2. AOF可能比RDB慢,我自己觉得应该和RDB的fork函数创建子进程有关有关。

总结:RDB速度上和资源的利用上具有优势,但在安全性上AOF更加稳妥。

以上来自redis官网瑞迪斯持久性 |雷迪斯 (redis.io),还有自己的一点小理解(理解有误希望您能纠正)。

猜你喜欢

转载自blog.csdn.net/weixin_53050118/article/details/130036222