Redis——快速入门第三课:真实项目里的缓存完整流程

文章目录

  • [第 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 点

  1. Redis 是 数据库前面的一层缓存
  2. 永远 先查 Redis
  3. 查不到才查数据库
  4. 写 Redis 一定要设 TTL
  5. 更新数据 → 删缓存
  6. key 设计很重要(user:1001)
相关推荐
科技小花2 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸2 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain2 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希3 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神3 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员3 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java3 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿4 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴4 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU4 小时前
三大范式和E-R图
数据库