Redis 宕机了,缓存的数据怎么办?

为了避免宕机导致数据丢失,Redis 使用了持久化,有 AOF、RDB 和混合三种方式。

AOF

AOF,以日志的形式记录所有写命令。

写命令会先追加到 AOF 缓冲区末尾,再写到磁盘的 AOF 文件中。

当 AOF 文件过大时,Redis 会进行重写,直接根据数据的最新状态,生成写命令作为新日志。

RDB

AOF 虽然保证可靠,但恢复时,需要执行所有写命令,速度会较慢,于是就有了 RDB。

RDB,把某一时刻的内存快照保存到磁盘。恢复时,只需把 RDB 文件读入内存,速度比 AOF 快得多。

底层 Redis 提供了 save 和 bgsave 两个命令来生成 RDB 文件。

save 在主线程中执行,而 bgsave 是 fork 子进程来执行,避免对主线程的阻塞,性能更好。

混合

RDB 虽然恢复速度快,但不保证可靠。

针对这个问题,Redis 4.0 中增加了一个混合使用 AOF 和 RDB 的方法。

先让 RDB 以一定的频率执行,然后在两次快照间,使用 AOF 记录写命令。

如何选用呢?

实际使用时,如果数据不能丢失,那就用混合。如果允许分钟级别的丢失,可以只用 RDB。

参考:
04 | AOF日志:宕机了,Redis如何避免数据丢失?
05 | 内存快照:宕机后,Redis如何实现快速恢复?

posted @ 2021-12-09 17:45  ayuecoding  阅读(571)  评论(0)    收藏  举报