12.2.1 缓存与存储
- 缓存: 缓存可重建, 但是在高并发下会造成雪崩
- 存储: 对业务可能会造成巨大影响
12.2.2 借助 AOF 机制恢复
Redis 执行了 flush 操作后, AOF 持久化文件会受到什么影响呢?
- appendonly no: 对 AOF 持久化没有任何影响, 因为根本就不存在 AOF 文件
- appendonly yes: 只不过是在 AOF 文件中追加了一条记录, 例如下面就是AOF文件中的 flush 操作记录:
*1
$8
flushall
注意:
如果发生了 AOF 重写, Redis 遍历所有数据库重新生成 AOF 文件, 并会覆盖之前的 AOF 文件。所以如果 AOF 重写发生了, 也就意味着之前的数据就丢掉了, 那么利用 AOF 文件来恢复的办法就失效了。所以当误操作后, 需要考虑如下两件事:
- 调大 AOF 重写参数 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size, 让 Redis 不能产生 AOF 自动重写
- 拒绝手动 bgrewriteaof
如果要用 AOF 文件进行数据恢复, 那么必须要将 AOF 文件中的 flushall 相关操作去掉, 为了更加安全, 可以在去掉之后使用 redis-check-aof 这个工具去检验和修复一下 AOF 文件, 确保 AOF 文件格式正确, 保证数据恢复正常。
12.2.3 RDB 有什么变化
Redis 执行了 flushall 操作后, RDB 持久化文件会受到什么影响呢?
- 如果没有开启 RDB 的自动策略, 也就是配置文件中没有类似如下配置:
save 900 1
save 300 10
save 60 10000
那么除非手动执行过 save、bgsave 或者发生了主从的全量复制, 否则 RDB 文件也会保存 flush 操作之前的数据, 可以作为恢复数据的数据源。
注意:
**
- 防止手动执行 save、bgsave, 如果此时执行 save、bgsave, 新的 RDB 文件就不会包含 flush 操作之前的数据, 被老的 RDB 文件进行覆盖 (这一句没理解)
- RDB 文件中的数据可能没有 AOF 实时性高, 也就是说, RDB 文件很可能很久以前主从全量复制生成的, 或者之前用 save、bgsave 备份的
- 如果开启了 RDB 的自动策略, 由于 flush 涉及键值数量较多, RDB 文件会被清除, 意味着使用 RDB 恢复基本无望
12.2.4 从节点有什么变化
Redis 从节点同步了主节点的 flush 命令, 所以从节点的数据也是被清除了, 从节点的 RDB 和 AOF 的变化与主节点没有任何区别。
12.2.5 快速恢复数据
以 AOF 为例:
- 防止 AOF 重写。快速修改 Redis 主从的 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 变为一个很大的值, 从而防止了 AOF 重写的发生
config set auto-aof-rewrite-percentage 1000
config set auto-aof-rewrite-min-size 100000000000
- 去掉主从AOF文件中的flush相关内容
*1
$8
flushall
- 重启 Redis 主节点服务器,恢复数据