MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第八章:Redis 高级应用

一、Redis 实现点赞功能 ⭐⭐⭐⭐⭐

业务需求

文章:

复制代码
复制代码
文章ID:100

用户:

复制代码
复制代码
用户1

用户2

要求:

  • 用户只能点赞一次
  • 可以取消点赞
  • 查询点赞人数

Redis 设计

使用 Set:

复制代码
复制代码
article:like:100

保存:

复制代码
复制代码
user:1

user:2

user:3

点赞

复制代码
复制代码
SADD article:like:100 user:1

取消点赞

复制代码
复制代码
SREM article:like:100 user:1

判断是否点赞

复制代码
复制代码
SISMEMBER article:like:100 user:1

获取点赞数量

复制代码
复制代码
SCARD article:like:100

为什么不用 MySQL?

如果点赞非常频繁:

复制代码
复制代码
100万人点赞

每次:

复制代码
复制代码
INSERT
DELETE

数据库压力大。

Redis:

内存操作速度快。


二、Redis 实现排行榜 ⭐⭐⭐⭐⭐

场景

例如:

游戏积分:

复制代码
复制代码
玩家A 1000分

玩家B 900分

玩家C 800分

使用 ZSet

Key:

复制代码
复制代码
game:rank

数据:

复制代码
复制代码
A 1000

B 900

C 800

Score:

就是排名依据。


添加分数

复制代码
复制代码
ZADD game:rank 1000 A

增加积分

复制代码
复制代码
ZINCRBY game:rank 100 A

查询排行榜

前三名:

复制代码
复制代码
ZREVRANGE game:rank 0 2

获取排名

复制代码
复制代码
ZREVRANK game:rank A

三、Redis 实现签到功能 ⭐⭐⭐⭐

场景

用户每天签到。

例如:

复制代码
复制代码
用户1001

2026-07-15 已签到

方案一:Bitmap(位图)

Redis 提供:

复制代码
复制代码
Bitmap

用一个 Bit 表示签到状态。

例如:

复制代码
复制代码
日期:

1 2 3 4 5

签到:

1 0 1 1 0

表示:

1、3、4号签到。


命令

签到:

复制代码
复制代码
SETBIT sign:1001 15 1

查询:

复制代码
复制代码
GETBIT sign:1001 15

优点

非常节省空间。

适合:

大量用户签到。


四、Redis 实现最近浏览记录 ⭐⭐⭐⭐

场景

用户最近看过:

复制代码
复制代码
商品A

商品B

商品C

要求:

  • 保持顺序
  • 新浏览放前面
  • 控制数量

使用 List

Key:

复制代码
复制代码
history:user:1001

添加:

复制代码
复制代码
LPUSH history:user:1001 product:1

查看:

复制代码
复制代码
LRANGE history:user:1001 0 9

保存最近10条。


五、Redis 发布订阅(Pub/Sub)

什么是发布订阅?

一个服务发布消息。

多个服务接收。

结构:

复制代码
复制代码
发布者

   ↓

 Redis Channel

   ↓

订阅者

示例

发布:

复制代码
复制代码
PUBLISH news hello

订阅:

复制代码
复制代码
SUBSCRIBE news

应用场景

  • 实时通知
  • 聊天系统
  • 消息广播

六、Redis 实现验证码

场景:

手机验证码:

复制代码
复制代码
138xxxx

验证码:

123456

Redis:

复制代码
复制代码
phone:code:138xxxx

Value:

复制代码
复制代码
123456

TTL:

复制代码
复制代码
5分钟

七、Redis 实现购物车

购物车:

复制代码
复制代码
用户1001

商品1 数量2

商品2 数量3

推荐:

Hash。

Key:

复制代码
复制代码
cart:user:1001

字段:

复制代码
复制代码
product:1 → 2

product:2 → 3

八、常见业务与 Redis 对应关系

业务 Redis结构
缓存对象 String / Hash
用户Token String
点赞 Set
收藏 Set
排行榜 ZSet
签到 Bitmap
购物车 Hash
浏览记录 List
消息广播 Pub/Sub

九、本章总结

Redis 不只是缓存。

它还能作为:

  • 高性能计数器
  • 排行系统
  • 用户关系系统
  • 临时数据存储
  • 消息通信工具

本章一句话总结

Redis 的价值在于利用不同数据结构解决不同业务问题,而不是简单存 Key-Value。


思考题(精简回答)

  1. 为什么文章点赞功能使用 Set,而不是 List? 因为 Set 自动去重,可以保证一个用户只能点赞一次。List 允许重复,会出现同一个用户多次点赞的问题。

  2. 为什么排行榜必须使用 ZSet?
    因为排行榜需要:保存唯一用户、根据分数排序。ZSet 自带 Score 排序,可以快速获取排名。

  3. 用户签到为什么适合使用 Bitmap?
    因为签到数据通常只有两种状态:已签到、未签到。Bitmap 使用 bit 存储,占用空间小,适合大量用户签到记录。

  4. 最近浏览记录为什么适合使用 List?
    List有序、支持头部插入,新浏览的商品放前面,可以方便获取最近的浏览记录

  5. 购物车为什么通常使用 Hash?
    因为购物车是一个对象:商品ID → 数量 。Hash 可以单独修改某个商品数量,操作方便。

  6. Redis 发布订阅适合解决什么问题?
    适合消息广播场景,例如:实时通知、聊天消息、系统消息推送。一个消息可以被多个订阅者接收。

相关推荐
Kobebryant-Manba1 小时前
学习Bert
学习·自然语言处理·bert
渣渣灰飞1 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第十章:Redis 综合企业项目实战
学习·mysql·缓存
Alluxio2 小时前
重卡自动驾驶数据引擎升级,智加科技凭借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赋能的全链路方案
人工智能·学习