Redis我们都知道Redis的内容是放在内存当中的,如果我们的安装Redis的服务器宕机了,那么我们在内存保存的内容也就丢失了。在Redis当中给提供了不同级别的持久化的方式来进行数据的保存:
- RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
- AOF持久化方式记录每次对服务器写的操作。当服务器重启的时候会重启执行这些命令来恢复原始的数据,AOF命令以redis协议追加每次写的操作到文件的末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
- 也可以不运行持久化的方式。只是保证服务器存在的情况下运行。
- 两种持久化的方式都可以共同存在,在这种情况下,Redis重启的时候会优先载入AOF的文件来恢复原始的数据,通常情况下AOF的文件保存的数据要比RDB的方式保存的数据集要完整。
RDB的优点与缺点
-
优点
- RDB是一个非常紧凑的文件,保存某个时间点的数据集,然后根据指定的时间间隔进行存储。
- RDB是一个紧凑的单一文件,很方便的传导远端数据中心,适合用于灾难恢复。
- RDB在保存文件时,父进程唯一需要的是fork出一个子进程,接下来的工作全部由子进程来完成。所以RDB的持久化方式可以最大化redis的性能。
- 与AOF相比,恢复大的数据集的时候RDB的方式会更快一些。
-
缺点
- Redis 如果发生宕机的时候,我们的RDB快照还没有进行数据备份,那么容易把在定时前存储的内容全部丢失。
- RDB需要fork自己成来保存数据到硬盘中,当当数据级比较大的时候fork进程就比较耗时,会导致Redis在毫秒级内不能响应客户端的请求。AOF也需要fork但是可以调节重写日志的频率来提高数据的耐久度。
AOF 优点和缺点
-
优点
- 使用AOF会让你的Redis更加耐久。并且我们可以使用不同的策略fsync。每秒,每次写的时候策略。Redis的性能还是依然很好。一旦出现故障丢失的就是一秒的数据而已。
- AOF文件是一个只进行追加的日志文件,所以不需要写入seek,及时由于某些原因导致未执行完整的执行命令,我们也可以使用redis-check-aof 工具来修复 这些问题。
- Redis 可以使在AOF文件变得过大的时候,会自动的在后台对AOF进行重写,重写后的新的AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是就对安全的。即使在重写的时候,服务器发生了宕机,现有的AOF文件也不丢失。一旦新文件创建完成。Redis就会切换到新文件中并开始对新的AOF文件进行追加操作。
- AOF文件有序的保存了对数据库执行的所有写入操作。这些写入操作以Redis协议的格式保存。因此AOF文件也可以被人容易读懂,对文件进行分析也是很轻松。
-
缺点
- AOF的体积要是RDB文件的体积大。
- 根据需要的fsync策略 AOF的速度可能会慢于RDB。一般情况下fsync的性能依然非常高,而关闭fsync 可以让AOF的速度和RDB一样快。即使在巨大的写入负载时,RDB可以提供更有保证的最大延迟时间。
-
选择合适的快照
- 如果我们能接受几分钟的数据丢失,那么RDB持久化的方式是挺合适的。
- AOF的方式能帮助我们快速的保存数据。
快照
-
RDB快照保存
默认情况下,Redis 将数据库快照片保存在dump.rdb的二进制文件中,我们在Redis进行设置。 save 60 1000 满足条件就是 60秒内至少有1000 个键被改动。 这种方式被称为 快照snapshotting.
工作方式
上面所说保存 保存到我二进制文件中,服务器需要执行以下的操作才可以实现。
- Redis调用forks ,同时拥有父进程和子进程。
- 子进程将数据集写入到一个临时的RDB文件中。
- 当子进程完成对新的RDB文件的写入时,新文件替换旧文件,并删除旧的RDB文件。
这种方式帮助Redis 可以从 写时复制机制中获益。
-
追加方式的AOF
- AOF的快照方式是在文件后面直接追加命令。 我们只需要在配置文件中打开 appendonly yes .但是随着时间的推移,AOF文件会越来越大,那么AOF文件就可以开始进行重建,执行BGREWRUTEAOF命令。 Redis 将会生成一个新的AOF文件。
- 如果文件有所损坏,我们也可以使用命令来进行恢复redis-check-aof –fix
工作方式 - 两者都利用了写是复制的机制。
- Redis开始执行fork();同事拥有父进程和子进程。
- 子进程开始将新的AOF文件内容写入到临时文件中。
- 对于所写的父进程是两边操作,一边写入到内存换从中,一边将这些数据追加到AOF文件中。
- 子进程完成工作后给父进程发送一个信号,父进程接收到信号后,内存数据追加到新的AOF文件中。
- 最后新文件替换旧文件。然后命令追加到新文件中。
![](https://img.haomeiwen.com/i4237685/aec06ba11411f506.jpg)
网友评论