Redis持久化机制 RDB和AOF的区别
一、简单介绍
Redis中的持久化机制是一种当数据库发生宕机、断电、软件崩溃等,数据库中的数据无法再使用或者被破坏的情况下,如何恢复数据的方法。
Redis中共有两种持久化机制
RDB(Redis DataBase)
AOF(Append Only File)
二、什么是RDB
- RDB在指定的时间间隔内将内存中的全部数据集快照写入磁盘(如果原先存在RDB文件的话,新的RDB文件会覆盖掉就得RDB文件),也就是Snapshot快照,它恢复时是将快照文件直接读到内存里,便可直接恢复数据。
- 因为RDB是将内存中的全部数据写入磁盘,因此随着时间的推移,内存中的数据会越来越多,也就代表着需要的备份时间会越来越长;
- 在恢复时,只需要将RDB文件中的内容装载到内存中就可以了,这也是一个复制的过程,因此会比较快。
- 因为在数据备份的时候是每隔一段时间才备份一次,因此使用RDB恢复时只能恢复到上一次备份时间点之前的数据。
三、什么是AOF
- AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。
- AOF每次在文件末尾追加写命令默认是每秒钟一次,因此AOF方式也是会丢失数据的,不过最多只会丢失一秒的数据。
- Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。(假如AOF文件中记录了set name a , set name b set name c, 那么对于最终结果而言这三条指令和set name c的效果是相同的,从结果上来看,我们只知道 name 是 c,因此只需要记录将这三条写命令重写为一条set name c 就可以了 )
- 在Redis采用AOF恢复数据时,需要将AOF文件中的命令重新执行一次,所以自然是会慢一些。
四、AOF和RDB对比
一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 应该同时使用两种持久化功能。
如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
有很多用户都只使用 AOF 持久化, 但并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。
你为什么不努力。。