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 是数据持久化层。

相关推荐
Alluxio1 小时前
重卡自动驾驶数据引擎升级,智加科技凭借Alluxio实现训练吞吐10倍跃迁
分布式·科技·机器学习·缓存·ai·自动驾驶·汽车
xian_wwq2 小时前
【学习笔记】多模态部署:VLM、语音、视频理解(29/35)
笔记·学习·音视频
冷小鱼2 小时前
AI Agent的核心算法:自主学习与反思(Self-Reflection / Critique)
人工智能·学习·算法·自主学习·self-reflection·critique·反思
91刘仁德2 小时前
MySQL 数据库基础操作知识点整理
数据库·mysql·oracle
白露与泡影12 小时前
Redis 缓存实战:雪崩、穿透、击穿一次讲透
数据库·redis·缓存
寒月小酒13 小时前
第三章 索引构建(2-all -in-rag学习)
学习
天国梦13 小时前
中学生居家英语听力训练深度解析:从核心痛点到AI赋能的全链路方案
人工智能·学习
wuqingshun31415915 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
胡渠洋17 小时前
postman学习
学习·测试工具·postman