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)
相关推荐
运维行者_8 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev8 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1238 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器8 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天9 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
桌面运维家9 小时前
如何用半缓存云桌面将服务器硬盘容量扩展至本地终端?
运维·服务器·缓存
南墙上的石头10 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画11 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc11 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t12 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb