Redis中的RDB和 AOF的区别

Redis中持久化技术分为两种,一种是RDB,一种是AOF.

这两者有什么区别呢?

定义的区别:

  1. RDB:RDB是每隔一段时间自动将内存中的数据集快照写入磁盘中,也就是我们所说的Snapshot快照,他恢复(读取)数据是将快照文件直接读取到内存中.
  2. AOF:AOF是用日志的形式将每一个写操作都记录在日志文件中,只允许进行增量操作,不允许进行修改操作.他恢复(读取)数据来执行过的操作重新执行一遍.

实现的区别

  1. RDB: Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能.如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失.
  2. AOF:Redis中的AOF默认是不开启的,我们可以在redis.conf 配置文件中进行编辑,开启AOF功能,当需要对数据进行恢复操作时,将之前持久化保存的AOF文件替换掉redis保存rdb文件的目录下,重新启动的redis进程将AOF文件中记录的写操作重新执行一遍,即可恢复数据.

注: 当AOF和RDB同时开启时,AOF优先级更高,因为AOF恢复数据更加全面.

触发机制的区别

  1. RBD:间隔一段时间后自动进行保存操作.默认频率是1分钟内改了1万次,或5分钟内改了10次,或15分钟内改了1次.
  2. AOF:每进行一次写操作,就会自动对原先的.aof文件进行增量操作.

细节上的区别

  1. RDB:在redis进行RDB持久化时,有两种操作:save 和 bgsave; 他们的区别就是当进行save操作时,其他线程进入阻塞状态,当持久化结束后,在进行相应,而bgsave是在持久化的同时,redis仍能响应其他请求.
  2. AOF:AOF持久化形成的.aof文件因为是只能进行增量操作,所以文件会越来越大,这个时候我们就需要对文件进行压缩处理.而redis自动为我们提供这项服务,就是Rewrite压缩.默认是当新的.aof文件大小是原来.aof文件大小的两倍,且文件大小>64M时触发.

小结

  1. RDB在恢复较大的数据集的时候效率要高于AOF,因为数据的直接覆盖要比执行命令更快一些.
  2. RDB可能存在数据丢失的情况,当在存储间隔期时,如果redis 宕机的话,这一时间段的数据就会丢失.而AOF会将所有的写操作按照配置文件中的规定进行记录,默认是立刻进行记录,所以数据丢失情况较少.
  3. AOF因为是就操作进行记录,所以很容易被其他人进行破解,从而对数据进行分析.

猜你喜欢

转载自blog.csdn.net/shiliu_baba/article/details/106594957