文章目录
- [第 3 课:Redis 在真实项目里是怎么用的(缓存全流程)](#第 3 课:Redis 在真实项目里是怎么用的(缓存全流程))
-
- 一、先解决一个真实问题(你一定见过)
-
- [❓ 问题场景](#❓ 问题场景)
- [二、Redis 缓存的标准解决方案(核心)](#二、Redis 缓存的标准解决方案(核心))
-
- [⭐ 标准流程(一定要记住)](#⭐ 标准流程(一定要记住))
- [三、一步一步拆解(0 基础可操作)](#三、一步一步拆解(0 基础可操作))
-
- [1️⃣ 设计 Key(非常重要)](#1️⃣ 设计 Key(非常重要))
- [2️⃣ 第一次请求(Redis 里还没数据)](#2️⃣ 第一次请求(Redis 里还没数据))
- [3️⃣ 查数据库(模拟)](#3️⃣ 查数据库(模拟))
- [4️⃣ 写入 Redis(一定要设过期)](#4️⃣ 写入 Redis(一定要设过期))
- [5️⃣ 再次请求(缓存命中)](#5️⃣ 再次请求(缓存命中))
- 四、为什么一定要设置过期时间?
-
- [❌ 不设过期的风险](#❌ 不设过期的风险)
- [✅ 推荐经验值](#✅ 推荐经验值)
- [五、缓存更新 & 删除(新手最容易踩坑)](#五、缓存更新 & 删除(新手最容易踩坑))
-
- [❓ 数据库更新了,Redis 怎么办?](#❓ 数据库更新了,Redis 怎么办?)
-
- [❌ 错误思路:先更新 Redis](#❌ 错误思路:先更新 Redis)
- [✅ 正确做法(记住这个顺序)](#✅ 正确做法(记住这个顺序))
- [六、3 个你一定会遇到的"缓存坑"](#六、3 个你一定会遇到的“缓存坑”)
-
- [坑 1️⃣:缓存穿透(查不到的数据)](#坑 1️⃣:缓存穿透(查不到的数据))
- [坑 2️⃣:缓存击穿(热点 key 失效)](#坑 2️⃣:缓存击穿(热点 key 失效))
- [坑 3️⃣:缓存雪崩(大量 key 同时过期)](#坑 3️⃣:缓存雪崩(大量 key 同时过期))
- 七、你现在已经能"读懂项目代码"了
- [八、这一课你必须牢牢记住的 6 点](#八、这一课你必须牢牢记住的 6 点)
Redis 真正"值钱"的一课 ------
👉 Redis 在真实项目里的缓存完整流程
你学完这一课,就能看懂项目、自己设计缓存、不容易踩坑。
第 3 课:Redis 在真实项目里是怎么用的(缓存全流程)
目标:
不是背命令,而是知道"什么时候该用 Redis、怎么用才对"
一、先解决一个真实问题(你一定见过)
❓ 问题场景
一个接口:
text
GET /user/1001
每次请求都查 MySQL:
- 慢
- 数据库压力大
- 并发一高就扛不住
二、Redis 缓存的标准解决方案(核心)
⭐ 标准流程(一定要记住)
text
请求来了
↓
先查 Redis
↓
有数据 → 直接返回(快)
↓
没数据 → 查 MySQL
↓
写入 Redis(设过期)
↓
返回结果
👉 这就是 "Cache Aside Pattern(旁路缓存)"
90% 项目都用这一套
三、一步一步拆解(0 基础可操作)
1️⃣ 设计 Key(非常重要)
不要随便用 key。
❌ 错误示例:
text
user
✅ 正确示例:
text
user:1001
👉 规则 :
业务名:主键
2️⃣ 第一次请求(Redis 里还没数据)
bash
get user:1001
# (nil)
说明缓存没命中。
3️⃣ 查数据库(模拟)
假设数据库返回:
json
{id:1001,name:"张三",age:18}
4️⃣ 写入 Redis(一定要设过期)
bash
set user:1001 "{id:1001,name:张三,age:18}" ex 300
含义:
- 缓存 5 分钟
- 避免脏数据长期存在
5️⃣ 再次请求(缓存命中)
bash
get user:1001
👉 不再访问数据库
四、为什么一定要设置过期时间?
❌ 不设过期的风险
- 数据永远不更新
- 内存越用越多
- 出问题不好兜底
✅ 推荐经验值
| 场景 | TTL |
|---|---|
| 用户信息 | 5~10 分钟 |
| 商品信息 | 5~30 分钟 |
| 验证码 | 30~60 秒 |
| 登录状态 | 30 分钟~2 小时 |
五、缓存更新 & 删除(新手最容易踩坑)
❓ 数据库更新了,Redis 怎么办?
❌ 错误思路:先更新 Redis
千万别这么干
✅ 正确做法(记住这个顺序)
text
1. 更新数据库
2. 删除 Redis 缓存
示例:
bash
del user:1001
👉 下次请求会自动重新写缓存
六、3 个你一定会遇到的"缓存坑"
坑 1️⃣:缓存穿透(查不到的数据)
问题 :
一直查不存在的 userId → 每次都打数据库
解决思路(先知道):
- 查不到也缓存(短 TTL)
- 或参数校验
坑 2️⃣:缓存击穿(热点 key 失效)
问题 :
热门 key 过期瞬间 → 所有请求都打数据库
解决思路(先知道):
- TTL 随机
- 加锁
坑 3️⃣:缓存雪崩(大量 key 同时过期)
问题 :
Redis 集体失效 → 数据库扛不住
解决思路(先知道):
- 过期时间打散
- 限流 / 熔断
👉 现在只要知道名字即可,后面再学
七、你现在已经能"读懂项目代码"了
看到这样的逻辑:
text
if (redis.has(key)) {
return redis.get(key);
}
data = db.query();
redis.set(key, data, 300);
return data;
你应该能立刻反应:
"这是标准缓存旁路模式"
八、这一课你必须牢牢记住的 6 点
- Redis 是 数据库前面的一层缓存
- 永远 先查 Redis
- 查不到才查数据库
- 写 Redis 一定要设 TTL
- 更新数据 → 删缓存
- key 设计很重要(user:1001)