Redis AOF混合持久化详解
AOF优化-混合持久化
混合持久化是什么?
混合部署听名字似乎是同时开启RDB和AOF,实际上不是
混合部署实际发生在AOF重写阶段,将当前状态保存为RDB二进制内容,写入新的AOF文件,再将重写缓冲区的内容追加到新的AOF文件,最后替代原有的AOF文件。
此时的AOF文件,就不再单纯的是日志数据,而是二进制数据+日志数据的混合体,所以叫混合持久化。
混合持久化解决什么问题?
混合持久化是发生在原有的AOF流程,如果从这个视角来看,其实本质还是AOF,只是重写时使用了RDB进行了优化。
如果从更高层面来看,这个确实是属于RDB和AOF优点的融合,属于一种折中方案吧,变成了:可读性降低的AOF 或者说 性能变差的RDB?
在我看来,如果是考虑到对Redis核心处理性能的影响,那还是需要用RDB,如果是为了相对更可靠的数据记录,也就是尽可能丢失更少的数据,那还是得用AOF,同时,如果对可读性没有太大执念,那进一步开启混合持久化,是一个很好的选择,毕竟其实生产上,关注AOF可读性的情况实际比较少。
怎么开启
打开 redis 配置文件 redis.conf
aof-use-rdb-preamble5.0之后默认是打开的,所以5.0之后只要AOF配置开启,默认就是混合持久化
混合持久化开启之后,服务启动时如何加载持久化数据?
如果同时启用了 AOF 和 RDB,Redis 重新启动时,会使用 AOF 文件来重建数据集,因为通常来说, AOF 的数据会更完整
混合持久化还是属于AOF,所以如果有混合持久化,那肯定是优先使用混合持久化的数据。
如何区别是否有AOF混合持久化的数据
可以使用文件开头是否为"REDIS"来判断。
如下例子就是开启了混合持久化的 AOF 文件

完整的具体加载流程

总结
混合持久化是对AOF重写的优化,这种方式可以大大降低AOF重写的性能损耗,以及降低AOF文件的存储空间,付出的代价则是降低AOF文件的读写性
实际中,很少有真正需要去人肉读AOF数据的情况,这点从5.0之后默认打开AOF混合持久化模式也能看出。