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

相关推荐
xian_wwq13 小时前
【学习笔记】-深度认知系列-第1讲-AI不是魔法——三句话讲清楚人工智能到底是什么
笔记·学习·深度认知
M78佐菲13 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
别动我齐刘海13 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
呆呆小孩13 小时前
零基础学 MySQL(上):从建库建表到增删改查,一篇搭好 SQL 基础
android·sql·mysql
狂云歌14 小时前
2025年读书回顾,AI+游戏+历史
人工智能·学习·游戏
陈皮波比茶14 小时前
git学习
git·学习
Linux-lucky15 小时前
28-Linux学习之旅之Maven与Nexus制品库
linux·运维·学习·nginx·tomcat·maven
我不会插花弄玉15 小时前
2.库的操作【由浅入深-MySQL】
数据库·mysql
kyrie_sakura15 小时前
python学习笔记3 -- 流程控制语句结构
笔记·python·学习
冷凝娇16 小时前
【Pytest】2026 学习总结
学习·pytest