Redis的数据恢复优先级
-
如果只配置 AOF ,重启时加载 AOF 文件恢复数据;
-
如果同时配置了 RDB 和 AOF ,启动只加载 AOF 文件恢复数据;
-
如果只配置 RDB,启动将加载 dump 文件恢复数据。
拷贝 AOF 文件到 Redis 的数据目录,启动 redis-server AOF 的数据恢复过程:Redis 虚拟一个客户端,读取AOF文件恢复 Redis 命令和参数,然后执行命令从而恢复数据,这些过程主要在loadAppendOnlyFile() 中实现。
拷贝 RDB 文件到 Redis 的数据目录,启动 redis-server即可,因为RDB文件和重启前保存的是真实数据而不是命令状态和参数。
新型的混合型持久化
RDB和AOF都有各自的缺点:
-
RDB是每隔一段时间持久化一次, 故障时就会丢失宕机时刻与上一次持久化之间的数据,无法保证数据完整性
-
AOF存储的是指令序列, 恢复重放时要花费很长时间并且文件更大
Redis 4.0 提供了更好的混合持久化选项: 创建出一个同时包含 RDB 数据和 AOF 数据的 AOF 文件, 其中 RDB 数据位于 AOF 文件的开头, 它们储存了服务器开始执行重写操作时的数据库状态,至于那些在重写操作执行之后执行的 Redis 命令, 则会继续以 AOF 格式追加到 AOF 文件的末尾, 也即是 RDB 数据之后。
持久化实战
在实际使用中需要根据Redis作为主存还是缓存、数据完整性和缺失性的要求、CPU和内存情况等诸多因素来确定适合自己的持久化方案,一般来说稳妥的做法包括:
-
最安全的做法是RDB与AOF同时使用,即使AOF损坏无法修复,还可以用RDB来恢复数据,当然在持久化时对性能也会有影响。
-
Redis当简单缓存,没有缓存也不会造成缓存雪崩只使用RDB即可。
-
不推荐单独使用AOF,因为AOF对于数据的恢复载入比RDB慢,所以使用AOF的时候,最好还是有RDB作为备份。
-
采用新版本Redis 4.0的持久化新方案。