news 2026/9/6 11:08:26

后端开发必跪系列:一文撕开 MySQL、MongoDB、Redis 的“底裤”(附知识图谱)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端开发必跪系列:一文撕开 MySQL、MongoDB、Redis 的“底裤”(附知识图谱)

灵魂拷问:面试官问你“用过什么数据库”,你回答“MySQL”。他又问“那你们项目里Redis用来干嘛?”,你支支吾吾说“存……存东西?”。

恭喜你,今天这篇就是来给你“撑场面”的。

今天咱们换个姿势。
假如数据就是餐厅里的食材,那这哥仨就是厨房里各司其职的“三大战神”。读完这篇,你不仅知道它们怎么用,更知道它们为什么而活

把文末我整理的那张XMind全景图打开,边看边吃,效果翻倍!

第一回合:MySQL —— 那个“重度强迫症”的财务总管

比喻定位:餐厅里拿着计算器、一丝不苟的财务总监
核心标签:关系型、二维表、ACID(强一致性)、磁盘存储。

MySQL 是关系型数据库的“扛把子”。它最大的特点就是“规矩大”
你要存数据?先建表(Schema)。字段叫什么名?是整数还是字符串?长度多少?要不要默认值?必须提前设计好,差一个字节都不让存。

它的生存法则(ACID):

  • 原子性(A):要么全做,要么全不做(比如转账,你转100块,系统扣了你钱,对方没到账?MySQL绝不答应,它会回滚)。

  • 隔离性(I):多人同时操作不打架。

  • 持久性(D):存进硬盘里,断电了也不怕。

什么时候请它出山?

  • 银行转账、订单系统、用户信息——任何丢了钱或数据会引发“血案”的核心业务。

  • 需要多张表关联查询(Join)的复杂报表。

入门三连(必会SQL):

sql

-- 查:看菜单 SELECT * FROM dishes WHERE price < 50; -- 增:加新菜 INSERT INTO dishes (name, price) VALUES ('佛跳墙', 999); -- 改:菜价上涨 UPDATE dishes SET price = price + 10 WHERE name = '红烧肉'; -- 删:下架(谨慎操作!) DELETE FROM dishes WHERE name = '黑暗料理';

第二回合:MongoDB —— 那个“随性自由”的仓库管理员

比喻定位:不管大件小件、方不方正,直接往货架上扔的仓库小哥
核心标签:非关系型(NoSQL)、文档型(BSON/JSON)、无模式、分布式。

如果你受不了MySQL的“古板”,MongoDB绝对是你的“梦中情库”。
它不需要先建表,你想存什么就存什么。一条记录叫文档(Document),长得和 JSON 一模一样。

比如:用户信息突然加了个“头像字段”,MySQL要改表结构烦死,MongoDB直接存就行,老数据没有这个字段就是null,丝毫不影响。

它的生存法则:

  • 无模式(Schema-less):同一个集合里,A记录有3个字段,B记录有10个字段,完全OK

  • 横向扩展:数据太多?加机器就行了,天生适合大数据和物联网。

什么时候请它出山?

  • 日志系统(字段天天变)。

  • 电商商品详情页(不同品类商品参数完全不同)。

  • 内容管理系统(CMS),迭代极快的创业初期项目。

入门三连(Mongo Shell语法):

javascript

// 查:找价格小于50的(是不是很像JSON?) db.dishes.find({ price: { $lt: 50 } }); // 增:加新菜(直接插对象) db.dishes.insertOne({ name: "佛跳墙", price: 999, ingredients: ["鲍鱼", "海参"] }); // 改:涨价($set 是更新特定字段) db.dishes.updateOne({ name: "红烧肉" }, { $set: { price: 110 } }); // 删:下架 db.dishes.deleteOne({ name: "黑暗料理" });

第三回合:Redis —— 那个“脑子超快”的传菜员

比喻定位:端着菜在厨房和餐桌之间光速奔跑的传菜员
核心标签:键值对(Key-Value)、内存存储、闪电速度、缓存之王。

前面两位兄弟都是“老实人”,数据老老实实躺在硬盘上(读写慢,但安全)。
Redis 是个“疯子”,它把数据全部放在内存(RAM)里,读写速度能达到每秒10万+次,快得离谱!但代价是,断电可能丢数据(除非你开启持久化备份)。

它的杀手锏:不只是存字符串!

  • String(字符串):存短信验证码、用户Token。

  • Hash(哈希):存购物车信息(用户ID -> 商品ID + 数量)。

  • List(列表):做消息队列(先进先出)。

  • Set(集合):做抽奖、共同好友(去重)。

  • ZSet(有序集合):做实时排行榜(比如王者荣耀巅峰赛排名)!

什么时候请它出山?

  • 缓存:查MySQL之前先问Redis有没有,有就直接返回,给MySQL降降压。

  • 分布式锁:防止高并发下商品超卖。

  • Session共享:集群环境下,多台服务器共享用户登录状态。

入门三连(Redis命令):

bash

# 存(Key-Value) SET user:1001 '{"name":"张三"}' # 取 GET user:1001 # 排行榜神操作(ZSET) ZADD ranking 1000 "玩家A" # 添加分数 ZREVRANGE ranking 0 10 # 取出前10名

第四回合:终极拷问!我到底该怎么选?(面试必答)

很多新手在架构设计时,拿着锤子看什么都像钉子。记住下面这张表,面试官当场给你竖大拇指:

维度MySQL (财务总监)MongoDB (仓库小哥)Redis (传菜员)
存储介质硬盘(SSD/HDD)硬盘 + 内存纯内存(纯爷们不存硬盘)
数据结构严格的二维表(行+列)灵活的JSON文档键值对 + 5大特殊结构
事务支持强事务(ACID)支持多文档事务(较弱)支持简单事务(乐观锁)
查询速度较慢(毫秒级)中等(毫秒级)极快(微秒/纳秒级)
扩展性垂直扩展为主(分库分表难)天生水平扩展(分片集群)主从 + 集群(哨兵模式)
最适合金融、ERP、订单日志、CMS、物联网缓存、排行榜、消息队列

现实中的标准组合拳(大厂标配):
MySQL(主数据源) + Redis(高性能缓存) + MongoDB(非结构化日志/用户行为)
—— 各司其职,完美配合!


第五站:实战!一条数据从请求到返回,它们怎么配合?

假设你打开抖音,刷到了“小姐姐跳舞”的视频:

  1. Redis先上:APP请求视频信息,先查Redis缓存。如果有(缓存命中),光速返回,MySQL直接休息。

  2. MySQL兜底:如果Redis里没有(缓存穿透/未命中),请求去MySQL里把视频作者、标题、点赞数这些“硬数据”查出来。

  3. MongoDB助攻:这条视频下的“用户评论流”或者“操作日志”(结构变化大),直接异步丢给MongoDB存储,方便运营后台做大数据分析。

  4. Redis再写回:MySQL查出来的结果,立刻写入Redis并设置过期时间(比如1小时),下次再有人看,直接从第1步走,瞬间响应!


写在最后:别再死记硬背命令了!

数据库的本质,就是数据的存放与检索

  • 数据重要且要算账?找 MySQL。

  • 数据多变且量大?找 MongoDB。

  • 数据要快且临时?找 Redis。

只要你搞懂了它们各自的性格(存储结构)和生存环境(应用场景),命令只是“语法糖”,用时查一下就完事了。

学习路线图建议:

  1. 装环境:本地装个 MySQL(学SQL),再装个 Redis(敲SET/GET)。

  2. 做项目:把个人博客的“文章表”放MySQL,“访问量排行榜”放Redis。

  3. 去看源码:去看看SpringBoot怎么用@Cacheable注解整合Redis,这才是现代开发的常态。


【独家福利 · XMind 三库知识体系全景图】

文章看完,是不是觉得信息量有点大?别担心,我把MySQL索引原理、MongoDB复制集、Redis持久化策略(RDB/AOF)等所有深水区知识点,全部浓缩在了一张高清XMind思维导图里。

(建议把这张图设置成电脑/手机壁纸,遇到不懂的直接看图索引。毕竟,站在“上帝视角”学技术,才是最高效的降维打击!


如果这篇让你彻底搞懂了这哥仨的区别,请务必给我一个【赞】和【收藏】,让更多在迷茫中的小伙伴看到!

评论区聊聊:你生产环境中最依赖哪个数据库?有没有因为选错型而半夜起床删过库?(讲出你的故事,让大家高兴高兴 😂)

关注我,下期预告:《Docker 入门:一键部署你的MySQL+Redis,告别“我本地明明能跑”》!

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

半导体装备实时控制:鸿道操作系统如何构建确定性底座

做了这么多年工业控制&#xff0c;我越来越觉得半导体装备的控制系统是整个设备里最“拧巴”的一环&#xff1a;精度要到纳米级、周期要压到微秒级、连续运行几个月不能出一次调度错乱。很多朋友一开始以为是伺服电机和光栅尺的功劳&#xff0c;等真正把系统搭起来才发现&#…

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

FasterTransformer源码解析:GPU推理加速的核心优化与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 11:03:53

物联网终端JL-17T接传感器数据上传小程序的实战指南

JL-17T 到底能不能接传感器并把数据发到小程序&#xff1f;这是我在拿到样机后第一个想验证的问题&#xff0c;也是很多做物联网项目的人最关心的。先说结论&#xff1a;能&#xff0c;但拆开讲就一句话——GPIO、ADC、UART 这三类接口在平台原生层面就能搞定&#xff0c;I2C 和…

作者头像 李华
网站建设 2026/9/6 10:59:47

RISC-V启动流程与Bootloader实战:从复位向量到内核交棒

RISC-V 的启动流程&#xff0c;是我接触过的所有处理器体系里最“拆得开”的一条链路&#xff1a;上电复位、Bootloader 多级接力、固件特权级切换、最终把内核加载进内存再交棒。可它也是最容易让人懵圈的链路——因为 RISC-V 指令集规范本身并不规定上电后第一步该干什么&…

作者头像 李华
网站建设 2026/9/6 10:58:53

从沙漏到代码:定时任务的状态机与幂等控制设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 10:58:03

Canal 数据脱敏与安全同步:保障企业数据安全的传输解决方案

Canal 数据脱敏与安全同步&#xff1a;保障企业数据安全的传输解决方案 Canal 作为阿里巴巴开源的数据库增量订阅组件&#xff0c;在数据同步过程中如何保障敏感数据安全成为企业关注的焦点。本文详细介绍了 Canal 的字段级脱敏机制、敏感数据过滤策略以及传输加密实现方案&…

作者头像 李华