Redis(13)—持久化
Redis(13)—持久化
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!
RDB(Redis DataBase)
- 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
- Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程 都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。 这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那 RDB方式要比AOF方式更加的高效。RDB的缺点是后一次持久化后的数据可能丢失。我们默认的就是 RDB,一般情况下不需要修改这个配置!
- 有时候在生产环境我们会将这个文件进行备份!
- rdb保存的文件是dump.rdb 都是在我们的配置文件中快照中进行配置的!
- 触发机制:
-
save的规则满足的情况下,会自动触发rdb规则。
-
执行 flushall 命令,也会触发我们的rdb规则。
-
退出redis,也会产生 rdb 文件。
-
优点:适合大规模的数据恢复、对数据的完整性要求不高
-
缺点:需要一定的时间间隔进程操作!如果redis意外宕机了,这个后一次修改数据就没有的了! fork进程的时候,会占用一定的内容空间
AOF(Append Only File)
将我们的所有命令都记录下来,类似于history,恢复的时候就把这个文件全部在执行一遍!
-
以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件 但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
-
默认是不开启的,我们需要手动进行配置!我们只需要将 appendonly 改为yes,重启,redis 就可以生效。
-
redis-check-aof --fix
可以修复aof文件 -
aof 默认就是文件的无限追加,文件会越来越大,默认如果 aof 文件大于 64m,就会fork一个新的进程来将我们的文件进行重写!
-
优点:每一次修改都同步,文件的完整会更加好。每秒同步一次,可能会丢失一秒的数据 。从不同步,效率最高。
-
缺点:相对于数据文件来说,aof远远大于rdb,修复的速度也比 rdb慢。 Aof 运行效率也要比 rdb 慢,所以我们redis默认的配置就是rdb持久化。