Redis的RDB日志
RDB日志
AOF日志记录了每条操作的命令,也正因为记录的是操作命令,而不是实际的数据,所以,用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。也正是这个原因,RDB日志内存快照诞生了。
和 AOF 相比,RDB 记录的是某一时刻的数据,执行的是全量快照,并不是操作,所以,在做数据恢复时,我们可以直接把 RDB 文件读入内存,很快地完成恢复。
Redis 提供了两个命令来生成 RDB 文件,分别是 save 和 bgsave。
- save:在主线程中执行,会导致阻塞;
- bgsave:创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置。
写时复制技术:
利用写时复制技术,在执行快照的同时,正常处理写操作。
原理就是如果主线程需要对数据进行修改,则会复制一份副本对副本进行修改
小结
AOF日志与RDB日志都有各自的优缺点,没办法做到完全完美。所以Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法。
这样一来,快照不用很频繁地执行,这就避免了频繁 fork 对主线程的影响。而且,AOF 日志也只用记录两次快照间的操作,也就是说,不需要记录所有操作了,因此,就不会出现文件过大的情况了,也可以避免重写开销。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 goMars的学习随记!
评论