| 工具 | 正确拼写 | 类型 | 核心定位 |
|---|---|---|---|
| MySQL | MySQL | 关系型数据库(RDBMS) | 结构化数据存储、事务性业务 |
| Redis | Redis | 内存键值数据库 | 高性能缓存、临时数据、实时计算 |
| MongoDB | MongoDB | 文档型 NoSQL 数据库 | 非结构化 / 半结构化数据、灵活扩展 |
二、核心特性对比
| 特性 | MySQL | Redis | MongoDB |
|---|---|---|---|
| 存储介质 | 磁盘(支持内存引擎) | 内存(可选持久化到磁盘) | 磁盘(支持内存映射) |
| 数据模型 | 二维表(行 + 列)、强 Schema | 键值对(支持字符串 / 哈希 / 列表等) | BSON 文档(类 JSON、弱 Schema) |
| 事务支持 | ACID 完整支持(InnoDB 引擎) | 单命令原子性、部分多命令事务 | 单文档原子性、多文档事务(4.0+) |
| 查询能力 | 强大的 SQL、联表、聚合、索引 | 简单键查询、有限聚合 | 类 SQL 查询、聚合管道、地理索引 |
| 性能 | 磁盘 IO 为主,中高吞吐 | 内存操作,超高 QPS(百万级) | 文档存储,高吞吐、低延迟 |
| 扩展性 | 主从 / 分库分表(垂直 / 水平) | 主从 / 集群(分片) | 分片集群、副本集(自动故障转移) |
三、适用场景(核心区别)
1. MySQL:适合「结构化、事务性」业务
-
核心场景 :
- 电商订单、用户账户、支付系统(需要 ACID 保证);
- 财务数据、物流信息(强一致性要求);
- 报表统计、复杂联表查询(SQL 优势)。
-
典型用法 :
sql
-- 创建用户表(结构化、强Schema) CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 事务操作(保证原子性) BEGIN; UPDATE account SET balance = balance - 100 WHERE id = 1; UPDATE account SET balance = balance + 100 WHERE id = 2; COMMIT;
2. Redis:适合「高性能、临时 / 实时」场景
-
核心场景 :
- 缓存(减轻 MySQL 压力,如商品详情、用户信息);
- 分布式锁(秒杀、库存扣减);
- 计数器(点赞数、访问量)、限流器;
- 消息队列(List 结构)、会话存储(Session)。
-
典型用法 :
redis
-- 设置缓存(过期时间1小时) SET user:1001 '{"id":1001,"name":"张三"}' EX 3600; -- 计数器自增 INCR article:2001:like_count; -- 分布式锁(NX=不存在才设置,PX=毫秒过期) SET lock:order:5001 1 NX PX 30000;
3. MongoDB:适合「非结构化、灵活扩展」场景
-
核心场景 :
- 内容管理(文章、评论、朋友圈,字段不固定);
- 日志存储、物联网数据(海量、结构多变);
- 移动端数据(字段可动态扩展,无需改表)。
-
典型用法 :
javascript
运行
// 插入文档(无需提前建表,字段灵活) db.articles.insertOne({ title: "Redis实战", content: "缓存设计", tags: ["Redis", "缓存"], create_time: new Date(), author: {name: "张三", age: 30} // 嵌套文档 }); // 查询(类SQL,灵活) db.articles.find({tags: "Redis"}, {title: 1});
四、三者协同使用的典型架构
plaintext
用户请求 → 先查Redis缓存 → 缓存命中 → 直接返回
↓ 缓存未命中
查MySQL/MongoDB → 返回数据 → 同步更新Redis缓存
示例场景:
- 电商商品详情:Redis 缓存商品基本信息(高访问量),MySQL 存储商品完整结构化数据(库存、价格、规格),MongoDB 存储商品评价(非结构化、字段多变)。
- 秒杀系统:Redis 做库存计数器 + 分布式锁(高性能),MySQL 做最终订单落库(事务保证)。
五、选型总结
| 选谁? | 核心判断依据 |
|---|---|
| MySQL | 数据结构化、需要事务、复杂查询 |
| Redis | 追求极致性能、临时数据、缓存 / 锁 |
| MongoDB | 数据非结构化、字段灵活、海量存储 |