暗淡青春|宕机后,Redis如何实现快速恢复?( 三 )


到这里 , 你可以发现 , 虽然跟 AOF 相比 , 快照的恢复速度快 , 但是 , 快照的频率不好把握 , 如果频率太低 , 两次快照间一旦宕机 , 就可能有比较多的数据丢失 。 如果频率太高 , 又会产生额外开销 , 那么 , 还有什么方法既能利用 RDB 的快速恢复 , 又能以较小的开销做到尽量少丢数据呢?Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法 。
简单来说 , 内存快照以一定的频率执行 , 在两次快照之间 , 使用 AOF 日志记录这期间的所有命令操作 。 这样一来 , 快照不用很频繁地执行 , 这就避免了频繁 fork 对主线程的影响 。 而且 , AOF 日志也只用记录两次快照间的操作 , 也就是说 , 不需要记录所有操作了 , 因此 , 就不会出现文件过大的情况了 , 也可以避免重写开销 。 如下图所示 , T1 和 T2 时刻的修改 , 用 AOF 日志记录 , 等到第二次做全量快照时 , 就可以清空 AOF 日志 , 因为此时的修改都已经记录到快照中了 , 恢复时就不再用日志了 。
暗淡青春|宕机后,Redis如何实现快速恢复?这个方法既能享受到 RDB 文件快速恢复的好处 , 又能享受到 AOF 只记录操作命令的简单优势 , 颇有点“鱼和熊掌可以兼得”的感觉 , 建议你在实践中用起来 。


推荐阅读