一、企业项目 Redis 架构
典型后端架构:
用户请求
↓
NestJS 服务
↓
┌────────────┐
│ Redis │
│ 缓存层 │
└────────────┘
↓
MySQL
↓
持久化数据
Redis 作为:
MySQL 和业务服务之间的高速缓存层。
二、项目一:用户信息缓存
场景
用户访问个人中心:
GET /user/profile
第一次请求
流程:
查询 Redis
↓
不存在
↓
查询 MySQL
↓
保存 Redis
↓
返回
Redis:
Key:
user:info:1001
Value:
{
"id":1001,
"name":"Tom",
"age":20
}
TTL:
30分钟
后续请求
直接:
Redis
↓
返回用户信息
减少数据库压力。
三、项目二:商品详情缓存
场景
商品详情:
/product/detail/100
Redis:
Key:
product:detail:100
Value:
商品 JSON。
读取:
Redis
↓
命中
↓
返回
更新商品:
例如修改价格:
正确流程:
更新 MySQL
↓
删除 Redis
↓
下一次重新加载
四、项目三:登录 Token 管理
登录
用户:
user:1001
生成 JWT:
xxxxx
保存:
Redis:
token:user:1001
请求:
JWT
↓
Redis检查
↓
允许访问
退出:
删除:
DEL token:user:1001
立即失效。
五、项目四:文章点赞系统
需求
文章:
id=100
用户:
user=1
Redis:
Set:
article:like:100
保存:
user:1
user:2
user:3
点赞:
SADD article:like:100 user:1
取消:
SREM article:like:100 user:1
数量:
SCARD article:like:100
六、项目五:排行榜系统
例如:
商品销量排行榜:
商品A 1000
商品B 900
商品C 800
使用:
ZSet
Key:
product:sales:rank
增加销量:
ZINCRBY product:sales:rank 1 productA
获取排行:
ZREVRANGE product:sales:rank 0 9
获取 Top10。
七、项目六:秒杀库存扣减
问题
库存:
10
10000 人同时购买。
错误:
查询库存
↓
库存>0
↓
扣减
会超卖。
方案:
Redis + 分布式锁。
流程:
请求
↓
获取锁
↓
检查库存
↓
扣减 Redis库存
↓
创建订单
↓
释放锁
Redis:
库存:
stock:product:100
数量:
10
八、项目七:购物车
购物车:
用户:
1001
商品:
商品1 数量2
商品2 数量3
使用 Hash:
Key:
cart:user:1001
数据:
product:1 → 2
product:2 → 3
九、项目八:验证码
短信验证码:
Key:
sms:code:13888888888
Value:
123456
TTL:
5分钟
发送:
SET sms:code:xxx 123456 EX 300
十、企业 Redis Key 规范
推荐:
格式:
业务:模块:ID
例如:
用户:
user:info:1001
订单:
order:detail:2001
商品:
product:detail:3001
点赞:
article:like:100
十一、企业 Redis 使用原则
1. Redis 不作为最终数据库
错误:
只存 Redis
正确:
Redis
缓存
↓
MySQL
真实数据
2. 热点数据优先缓存
例如:
- 商品详情
- 首页数据
- 热门文章
3. 设置 TTL
避免:
- 数据永久存在
- 内存爆炸
4. 重要操作保证一致性
例如:
订单:
MySQL事务
+
Redis删除
十二、完整企业架构总结
用户
↓
NestJS API
↓
┌────────────────┐
│ Redis │
│ │
│ Token │
│ Cache │
│ Lock │
│ Rank │
└────────────────┘
↓
MySQL
↓
数据持久化
十三、第六阶段总结
| 内容 | 掌握能力 |
|---|---|
| Redis基础 | 理解缓存工具 |
| 数据结构 | 选择正确结构 |
| 缓存设计 | 提升系统性能 |
| 缓存问题 | 解决高并发异常 |
| Token | 企业登录管理 |
| 分布式锁 | 解决并发冲突 |
| 高级应用 | 点赞、排行、购物车 |
| 高可用 | 生产部署 |
| 综合实战 | 企业架构设计 |
本章一句话总结
Redis 在企业项目中不是替代 MySQL,而是作为高速缓存层,解决高并发访问、状态管理和业务性能问题。
思考题(精简回答)
-
用户信息为什么适合使用 Redis 缓存?
因为用户信息:查询频繁、修改较少。放 Redis 可以减少 MySQL 查询压力,提高访问速度。 -
商品修改后为什么要删除 Redis,而不是直接修改 Redis? 因为 Redis 只是缓存,MySQL 才是真实数据。修改 MySQL 后删除缓存,下次查询重新加载,可以降低缓存和数据库不一致风险。
-
登录系统中 Redis 和 JWT 分别负责什么?
JWT :负责身份认证,保存用户身份信息。
Redis:负责管理 Token 状态,例如退出登录、强制下线、Token 过期。 -
点赞为什么使用 Set?
因为Set:自动去重、判断用户是否点赞速度快。可以保证一个用户只能点赞一次 -
排行榜为什么使用 ZSet?
因为 ZSet:分数、自动排序。可以快速实现排名、Top N 查询。 -
秒杀库存为什么需要 Redis + 分布式锁?
Redis:供高速库存访问、减少数据库压力
分布式锁:保证同一时间只有一个请求修改库存、防止超卖 -
Redis 和 MySQL 在企业项目中是什么关系?
Redis 是缓存层,MySQL 是数据持久化层。