Redis持久化机制 RDB和AOF的区别

  一、简单介绍 

  Redis中的持久化机制是一种当数据库发生宕机、断电、软件崩溃等,数据库中的数据无法再使用或者被破坏的情况下,如何恢复数据的方法。

  Redis中共有两种持久化机制

    RDB(Redis DataBase)

    AOF(Append Only File)

       二、什么是RDB

  • RDB在指定的时间间隔内将内存中的全部数据集快照写入磁盘(如果原先存在RDB文件的话,新的RDB文件会覆盖掉就得RDB文件),也就是Snapshot快照,它恢复时是将快照文件直接读到内存里,便可直接恢复数据。
  1. 因为RDB是将内存中的全部数据写入磁盘,因此随着时间的推移,内存中的数据会越来越多,也就代表着需要的备份时间会越来越长;
  2. 在恢复时,只需要将RDB文件中的内容装载到内存中就可以了,这也是一个复制的过程,因此会比较快。
  3. 因为在数据备份的时候是每隔一段时间才备份一次,因此使用RDB恢复时只能恢复到上一次备份时间点之前的数据。

  三、什么是AOF

  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。
  1. AOF每次在文件末尾追加写命令默认是每秒钟一次,因此AOF方式也是会丢失数据的,不过最多只会丢失一秒的数据。
  2. Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。(假如AOF文件中记录了set  name  a , set name b set name c, 那么对于最终结果而言这三条指令和set name c的效果是相同的,从结果上来看,我们只知道 name 是 c,因此只需要记录将这三条写命令重写为一条set name c 就可以了 )
  3. 在Redis采用AOF恢复数据时,需要将AOF文件中的命令重新执行一次,所以自然是会慢一些。

  四、AOF和RDB对比

 

  一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 应该同时使用两种持久化功能。

  如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。

  有很多用户都只使用 AOF 持久化, 但并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。

 

posted on 2021-02-26 17:35  含光Aries  阅读(476)  评论(0编辑  收藏  举报