MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第十章:Redis 综合企业项目实战

一、企业项目 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,而是作为高速缓存层,解决高并发访问、状态管理和业务性能问题。


思考题(精简回答)

  1. 用户信息为什么适合使用 Redis 缓存?
    因为用户信息:查询频繁、修改较少。放 Redis 可以减少 MySQL 查询压力,提高访问速度。

  2. 商品修改后为什么要删除 Redis,而不是直接修改 Redis? 因为 Redis 只是缓存,MySQL 才是真实数据。修改 MySQL 后删除缓存,下次查询重新加载,可以降低缓存和数据库不一致风险。

  3. 登录系统中 Redis 和 JWT 分别负责什么?
    JWT :负责身份认证,保存用户身份信息。
    Redis:负责管理 Token 状态,例如退出登录、强制下线、Token 过期。

  4. 点赞为什么使用 Set?
    因为Set:自动去重、判断用户是否点赞速度快。可以保证一个用户只能点赞一次

  5. 排行榜为什么使用 ZSet?
    因为 ZSet:分数、自动排序。可以快速实现排名、Top N 查询。

  6. 秒杀库存为什么需要 Redis + 分布式锁?
    Redis:供高速库存访问、减少数据库压力
    分布式锁:保证同一时间只有一个请求修改库存、防止超卖

  7. Redis 和 MySQL 在企业项目中是什么关系?
    Redis 是缓存层,MySQL 是数据持久化层。

相关推荐
~kiss~3 小时前
Chroma 的边际相关性检索 - Maximal Marginal Relevance,检索的多样性
学习
扶风ff4 小时前
练题簿在线免费刷题:题目导入、章节管理、Excel 与 Word 导出,让题库更好用
学习·小程序·word·excel
JWASX4 小时前
Java 转 go 学习 - GRPC(3)
学习·golang
知识分享小能手4 小时前
C学习教程,从入门到精通,C语言概述 —— 知识点详解(1)
c语言·开发语言·学习
想做小南娘,发现自己是女生喵4 小时前
i.MX6ULL嵌入式Linux入门学习文档
linux·运维·学习
ShineWinsu4 小时前
对于Redis:缓存的解析
java·redis·缓存·缓存穿透·缓存击穿·缓存雪崩·缓存预热
害人终害己4 小时前
redis修改密码的地方在哪里
数据库·redis·缓存
Q26433650234 小时前
【有源码】基于Spring Boot和Vue的在线考试与交流系统-教育信息化背景下在线考试与交流一体化平台
java·vue.js·spring boot·mysql·spring·毕业设计·课程设计
都适、隶仁ミ5 小时前
【等保加固】MySQL5.7.38
运维·服务器·mysql·安全·等保
JWASX5 小时前
Java 转 go 学习 - Redis(1)
学习·golang