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

📅 2026/7/15 11:53:45
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第八章:Redis 高级应用
一、Redis 实现点赞功能 ⭐⭐⭐⭐⭐业务需求文章文章ID100用户用户1 用户2要求用户只能点赞一次可以取消点赞查询点赞人数Redis 设计使用 Setarticle: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分使用 ZSetKeygame:rank数据A 1000 B 900 C 800Score就是排名依据。添加分数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要求保持顺序新浏览放前面控制数量使用 ListKeyhistory: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 验证码 123456Redisphone:code:138xxxxValue123456TTL5分钟七、Redis 实现购物车购物车用户1001 商品1 数量2 商品2 数量3推荐Hash。Keycart:user:1001字段product:1 → 2 product:2 → 3八、常见业务与 Redis 对应关系业务Redis结构缓存对象String / Hash用户TokenString点赞Set收藏Set排行榜ZSet签到Bitmap购物车Hash浏览记录List消息广播Pub/Sub九、本章总结Redis 不只是缓存。它还能作为高性能计数器排行系统用户关系系统临时数据存储消息通信工具本章一句话总结Redis 的价值在于利用不同数据结构解决不同业务问题而不是简单存 Key-Value。思考题精简回答为什么文章点赞功能使用 Set而不是 List因为 Set自动去重可以保证一个用户只能点赞一次。List 允许重复会出现同一个用户多次点赞的问题。为什么排行榜必须使用 ZSet因为排行榜需要保存唯一用户、根据分数排序。ZSet 自带 Score 排序可以快速获取排名。用户签到为什么适合使用 Bitmap因为签到数据通常只有两种状态已签到、未签到。Bitmap 使用 bit 存储占用空间小适合大量用户签到记录。最近浏览记录为什么适合使用 ListList有序、支持头部插入新浏览的商品放前面可以方便获取最近的浏览记录购物车为什么通常使用 Hash因为购物车是一个对象商品ID → 数量 。Hash 可以单独修改某个商品数量操作方便。Redis 发布订阅适合解决什么问题适合消息广播场景例如实时通知、聊天消息、系统消息推送。一个消息可以被多个订阅者接收。