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

相关推荐
云贝教育-郑老师1 小时前
OceanBase 是如何搞定海量数据分片(Sharding)的?
学习·oceanbase·dba
BullSmall1 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
编程圈子2 小时前
电机驱动开发学习23. 保护体系与故障状态机
驱动开发·学习
码农颜2 小时前
5.1.1 原⼦性
数据库·mysql
别动我齐刘海3 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
进击的女IT3 小时前
通过mysql中的Data目录恢复数据库数据
数据库·mysql
神秘的MT4 小时前
C# WinForm Socket 服务器 + 串口转发
服务器·网络·学习·c#
nvd114 小时前
ArgoCD 双层轮询深入拆解:从 redis-app.yaml 注册到缓存重建的完整链路
redis·缓存·argocd
xiaoxiangsiyan4 小时前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel
zzzll11114 小时前
0基础入门大模型:一份清晰的学习路线图
人工智能·学习·chatgpt