news 2026/9/22 18:02:42

被面试官问:MySQL 有 Redo Log,为什么 Redis 还要搞个 AOF?我直接语塞了。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
被面试官问:MySQL 有 Redo Log,为什么 Redis 还要搞个 AOF?我直接语塞了。

这次咱们聊聊数据库底层的“保命符”——日志系统。

最近面了一家公司,面试官在聊完基础的八股后,突然把话题引向了持久化。

“你觉得日志在数据库里是干嘛用的?”

我心想,这题我会啊:“存操作记录,万一宕机了,靠日志把数据找回来。”

面试官挑了下眉毛:“那 MySQL 重启后能靠 Redo Log 做到 Crash-safe(崩溃恢复),Redis 重启靠 AOF 恢复,它们底层的逻辑是一回事吗?”

那一刻,我发现自己虽然背了“WAL(预写日志)”,但完全没想过为什么 MySQL 记的是物理改动,而 Redis 记的是命令。回来把这两者的日志实现扒开看,才发现这里面藏着“工程权衡”的艺术。


1. MySQL 的“铁三角”:Redo、Undo 和 Binlog

在 MySQL 里,日志不只是为了记录,它是为了支撑事务

Redo Log(重做日志):物理世界的“备忘录”

它是 InnoDB 存储引擎特有的。当你修改数据时,InnoDB 不会立刻去改磁盘上的 16KB 数据页(因为太慢),而是先把改动记录在 Redo Log 里。

  • 记录内容:物理日志。记录的是“在某个数据页的某个偏移量处,做了什么修改”。

  • 核心作用Crash-safe。只要 Redo Log 落盘了,哪怕断电,重启后也能把还没写进磁盘的数据“重做”出来。

Binlog(归档日志):官方的“账本”

它是 MySQL Server 层记录的逻辑日志。

  • 记录内容:逻辑日志。记录的是“给 ID=1 的这一行,把 name 改成张三”。

  • 核心作用:主从复制和数据恢复。


2. Redis 的“持久化双雄”:AOF 与 RDB

Redis 是内存数据库,它的日志逻辑更倾向于“简单、快速”。

AOF (Append Only File)

  • 记录内容:逻辑命令。你执行了set key value,它就在文件末尾追加一行set key value

  • 顺序问题:Redis 是先执行命令,再写日志(Write-after logging)。

    • 面试官追问:为啥先写数据再写日志?

    • 因为 Redis 追求极速,不希望在写日志前先做复杂的命令校验,执行成功了再记账,最稳妥。

RDB (Snapshot)

严格来说 RDB 算快照,不算日志,但它是 Redis 恢复元气的另一套方案。它直接把内存里的数据像“拍照片”一样存到磁盘。


3. 深度对比:为什么它们不一样?

这就是面试官最想听到的“深层思考”。

维度MySQL Redo LogRedis AOF
日志类型物理日志(改了哪块内存)逻辑日志(执行了啥命令)
写时机WAL(先写日志),保证数据不丢写后日志,追求极致吞吐量
容量限制固定大小,循环写入(类似环形缓冲区)不断追加,需要定期重写(AOF Rewrite)
恢复速度极快(直接重写物理块)(需要把命令一行行重新跑一遍)

关键点一:物理 vs 逻辑

MySQL 之所以用物理日志,是因为它要处理复杂的事务和崩溃恢复。物理日志恢复起来非常快,直接改内存地址就行。而 Redis 的 AOF 是跑命令,如果日志有 1000 万行,恢复时就要跑 1000 万次命令,速度感人。

关键点二:WAL(预写)的重要性

MySQL 必须是 WAL,因为磁盘上的数据页太重,必须靠日志保命。Redis 是内存数据库,数据本身就在内存里,日志只是为了重启后能找回来。


4. 总结:给面试官的一记“反杀”

下次面试官再问“日志区别”,你可以这样收尾:

“MySQL 的日志设计是为了支撑事务的 ACID 特性,特别是 Redo Log 的 WAL 机制,是工业级数据库‘数据不丢’的底气;而 Redis 的日志设计是为了在不影响高性能的前提下,尽量提供持久化能力。一个是‘为了不出错’,一个是‘为了跑得快’,这是它们本质的产品取向不同。”

这套话术下来,不仅展现了你对知识点的掌握,更展现了你对技术选型权衡的理解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 13:17:29

用户脚本:解锁网页定制的无限可能

用户脚本:解锁网页定制的无限可能 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 用户脚本正悄然改变我们与网页的互动方式,通过简单的代码注入实现深度的网页定制…

作者头像 李华
网站建设 2026/9/14 17:27:52

Zotero Style插件终极指南:文献管理效率翻倍的秘密武器

Zotero Style插件终极指南:文献管理效率翻倍的秘密武器 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地址…

作者头像 李华
网站建设 2026/9/22 16:12:14

无需手动安装CUDA!PyTorch-CUDA-v2.9镜像已预配置完成

无需手动安装CUDA!PyTorch-CUDA-v2.9镜像已预配置完成 在深度学习项目启动的前48小时里,有多少人真正花在写代码上?更多时候,我们正深陷于“为什么torch.cuda.is_available()返回False?”这样的问题中。环境配置——这…

作者头像 李华
网站建设 2026/9/11 18:04:44

HiJson终极指南:3分钟掌握JSON格式化神器

HiJson终极指南:3分钟掌握JSON格式化神器 【免费下载链接】HiJson Exported from https://code.google.com/p/json-view/ 项目地址: https://gitcode.com/gh_mirrors/hi/HiJson 还在为杂乱的JSON数据抓狂吗?面对密密麻麻的代码块,你是…

作者头像 李华
网站建设 2026/9/18 3:57:52

GetQzonehistory:3步搞定QQ空间历史说说完整备份

GetQzonehistory:3步搞定QQ空间历史说说完整备份 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆日益珍贵的今天,QQ空间承载了我们青葱岁月的点点滴滴…

作者头像 李华
网站建设 2026/9/20 16:42:19

CANFD协议驱动性能测试与调优操作手册

CANFD协议驱动性能测试与调优实战指南在汽车电子和工业控制领域,我们正经历一场通信带宽的“军备竞赛”。ADAS系统每毫秒都在生成海量传感器数据,域控制器之间的协同越来越像一台分布式超级计算机。而在这背后,CANFD(Flexible Dat…

作者头像 李华