当前位置: 首页 > news >正文

Redis 在项目里怎么用?验证码、Token、点赞、排行榜、限流、秒杀一篇讲清

很多人学 Redis 时,理论知识背了不少:String、Hash、List、Set、ZSet、缓存穿透、分布式锁、持久化……

但一到面试官问:

你项目里 Redis 具体用在哪些地方?

如果只回答一句“用来做缓存”,就显得太单薄了。

Redis 在 Java 后端项目里的使用场景其实很多,比如验证码、登录 Token、点赞收藏、排行榜、计数器、接口限流、秒杀库存、延迟任务等。

这篇文章就从项目场景出发,把 Redis 常见用法系统整理一遍。


一、Redis 在项目里常见用法有哪些?

常见场景有这些:

场景常用数据结构
缓存热点数据String / Hash
登录 TokenString
短信验证码String
分布式锁String
点赞收藏Set
排行榜ZSet
计数器String
接口限流String + Lua
秒杀库存String + Lua
延迟任务ZSet
简单消息队列List / Stream

面试时不要只说“我用 Redis 做缓存”,可以结合业务说:

我在项目里用 Redis 缓存商品详情、存储登录 Token、实现短信验证码过期、做点赞去重和排行榜。


二、短信验证码怎么用 Redis 实现?

短信验证码适合用 String。

设计方式:

key: login:code:手机号

value: 验证码

expire: 5 分钟

示例:

SET login:code:13800138000 739421 EX 300

校验时:

根据手机号取验证码、比较用户输入、验证成功后删除 key

流程图:

注意点:

设置过期时间 验证成功后删除 限制发送频率


三、如何防止验证码频繁发送?

可以额外设置一个发送频率 key。

key: login:code:limit:手机号

value: 1

expire: 60 秒

发送验证码前先判断这个 key 是否存在。

如果存在,说明 60 秒内已经发过,不允许重复发送。

流程:

这就是 Redis 过期时间在业务限频里的典型用法。


四、登录 Token 怎么存 Redis?

登录成功后生成 Token:

token = UUID / JWT / 随机字符串

存入 Redis:

key: login:token:token值

value: 用户信息或用户id

expire: 7 天

接口请求时:

从请求头取 token 查 Redis 查到:已登录 查不到:未登录或已过期

如果要实现滑动过期,可以每次访问接口时刷新过期时间:

EXPIRE login:token:xxx 604800

流程图:

五、Redis 存登录态和 JWT 有什么区别?

对比Redis TokenJWT
状态保存服务端保存登录状态服务端无状态
主动失效方便主动踢下线相对麻烦
统一管理方便不方便
依赖组件依赖 Redis不一定依赖 Redis
Token 内容可以只存随机字符串通常自包含用户信息

实习面试可以这样答:

Redis 存 Token 更方便做主动退出、踢人下线和统一管理;JWT 更适合无状态认证,但失效控制相对麻烦。


六、点赞功能怎么用 Redis 实现?

点赞需要防重复,适合用 Set。

比如文章 1001 的点赞用户:

key: article:like:1001

value: userId 集合

点赞:

SADD article:like:1001 2001

取消点赞:

SREM article:like:1001 2001

判断是否点赞:

SISMEMBER article:like:1001 2001

统计点赞数:

SCARD article:like:1001

Set 的特点是天然去重,所以非常适合点赞、关注、黑名单这类场景。


七、收藏功能怎么用 Redis 实现?

收藏也可以用 Set。

key: user:fav:用户id value: 商品id集合

收藏商品:

SADD user:fav:1001 2001

取消收藏:

SREM user:fav:1001 2001

判断是否收藏:

SISMEMBER user:fav:1001 2001

如果还要按收藏时间排序,可以考虑 ZSet,用时间戳作为 score:

ZADD user:fav:1001 1718000000 2001

这样既能去重,又能按照收藏时间排序。


八、排行榜怎么用 Redis 实现?

排行榜适合用 ZSet。

设计方式:

key: rank:score

member: userId

score: 分数

给用户加分:

ZINCRBY rank:score 10 user:1001

查询前 10 名:

ZREVRANGE rank:score 0 9 WITHSCORES

查询某个用户排名:

ZREVRANK rank:score user:1001

排行榜流程:

面试里 Redis 排行榜基本就是 ZSet,这是标准答案。


九、浏览量、阅读数怎么用 Redis 实现?

浏览量、阅读数适合用 String 的原子自增。

INCR article:read:1001

如果每次阅读都直接更新 MySQL,数据库压力会比较大。

可以先写 Redis:

阅读请求 -> Redis INCR

然后定时批量同步到 MySQL:

每隔一段时间把 Redis 里的阅读数刷到数据库

这类数据通常允许短暂不一致,所以很适合先用 Redis 抗流量。


十、接口限流怎么用 Redis 实现?

简单限流可以用计数器。

比如限制一个用户 1 分钟最多请求 60 次:

key: rate:user:1001:minute

value: 请求次数

expire: 60 秒

每次请求:

INCR rate:user:1001:minute 如果第一次创建 key,设置过期时间 如果次数超过 60,就拒绝

流程图:

注意:
INCR 和 EXPIRE 最好保证逻辑安全,复杂场景可以用 Lua 脚本。


十一、为什么限流要用 Lua 脚本?

限流通常包含多个步骤:

1. 判断 key 是否存在 2. 自增计数 3. 设置过期时间 4. 判断是否超过阈值

如果拆成多条命令,可能存在并发问题。

Lua 脚本在 Redis 中原子执行,可以保证这几个操作不会被其他命令插队。

面试可以这样说:

Redis 的 Lua 脚本适合把多个命令封装成一个原子操作,常用于限流和释放分布式锁。


十二、秒杀库存能不能只放 Redis?

Redis 可以用来抗高并发,但最终订单数据还是要落 MySQL。

常见秒杀思路:

1. 秒杀开始前,把库存预热到 Redis 2. 请求进来先在 Redis 扣减库存 3. 扣减成功后发送 MQ 4. 后台异步创建订单,写 MySQL 5. MySQL 做最终数据落库

流程图:

Redis 负责抗高并发,MySQL 负责最终可靠存储。


十三、Redis 秒杀如何防止超卖?

可以用 Redis 原子扣减。

简单命令:

DECR seckill:stock:1001

但要注意不能扣成负数。

实际更推荐用 Lua 脚本:

先判断库存是否大于 0 再扣减库存

这两个操作要原子执行。

逻辑:

库存 > 0:扣减并返回成功

库存 <= 0:返回失败

这样可以避免并发下库存被扣成负数。


十四、如何防止用户重复秒杀?

可以用 Set 记录已经下单的用户。

key: seckill:user:商品id value: userId 集合

Lua 脚本里可以同时做:

1. 判断用户是否已经抢过 2. 判断库存是否足够 3. 扣减库存 4. 记录用户已抢

这样可以同时防止:

同一用户重复下单 库存被扣成负数

这一段非常适合写进项目亮点里。


十五、Redis 做延迟队列怎么实现?

可以用 ZSet。

设计方式:

key: delay:queue member: 任务id score: 执行时间戳

添加任务:

ZADD delay:queue 1718000000 order:1001

消费者定时扫描到期任务:

ZRANGEBYSCORE delay:queue 0 当前时间戳 LIMIT 0 1

取到后执行任务,再删除。

适合简单延迟任务,比如:

订单 30 分钟未支付自动取消 优惠券到期提醒 定时关闭活动

不过生产复杂场景更推荐 MQ 的延迟消息。


十六、Redis 能不能当消息队列?

可以,但要看场景。

Redis 可以用这些结构做队列:

方式特点
List简单队列,使用 LPUSH/RPOP
Pub/Sub发布订阅,适合广播
Stream更像轻量 MQ,支持消费组和 ACK

List 示例:

LPUSH queue task RPOP queue

Pub/Sub 适合实时通知、广播,但不适合关键业务。

如果是订单、支付、库存这类核心业务消息,通常更推荐专业 MQ,比如 RabbitMQ、RocketMQ、Kafka。


十七、Redis Pub/Sub 有什么问题?

Pub/Sub 是发布订阅模型:

发布者发消息 订阅者收到消息

但它有几个明显问题:

消息不持久化 消费者不在线会丢消息 没有可靠确认机制

所以 Pub/Sub 适合实时通知、广播类场景,不适合订单支付这类关键业务。


十八、Redis Stream 是什么?

Stream 是 Redis 提供的消息流数据结构。

它支持:

消息持久化 消费组 消息确认 ACK 多个消费者协作消费

相比 List 和 Pub/Sub,Stream 更像一个轻量级消息队列。

但和 Kafka、RocketMQ 这类专业 MQ 相比,生态和专业能力还是弱一些。

面试答法:

Redis Stream 可以做轻量消息队列,但核心业务消息一般还是使用专业 MQ。


十九、Redis 做项目功能时要注意什么?

几个原则:

Redis 适合高频读、临时数据、允许短暂不一致的数据; 核心数据最终要落 MySQL; key 要设置合理过期时间; 避免大 key 和热 key; 多步操作注意原子性,可以用 Lua; 重要业务不能只依赖 Redis 内存数据。

比如:

适合 Redis必须落库
验证码支付流水
Token订单最终状态
限流计数库存最终结果
排行榜用户核心资产
临时状态财务数据

二十、Redis 项目场景怎么串起来讲?

面试时可以用这个模板:

在项目中,我主要用 Redis 做三类事情。 第一类是缓存,比如商品详情、用户信息,减少 MySQL 查询压力; 第二类是临时状态,比如验证码、登录 Token,通过过期时间自动失效; 第三类是高并发辅助功能,比如点赞去重用 Set,排行榜用 ZSet,限流和秒杀用 INCR/Lua 保证原子性。 同时我会注意缓存一致性、key 过期时间、大 key、热 key,以及核心数据最终落 MySQL。

这段可以直接背,再结合自己的项目替换具体业务名,就会自然很多。


总体流程图

总结

这一组可以按场景来记:

验证码:String + 过期时间 登录态:Token 存 Redis,可主动失效 点赞收藏:Set 去重 排行榜:ZSet 排序 阅读数:INCR 原子自增 限流:INCR + EXPIRE,复杂场景用 Lua 秒杀:Redis 预扣库存 + Lua 原子判断 + MQ 异步落库 延迟任务:ZSet 按时间戳排序 消息队列:简单场景可用 List/Stream,核心业务更推荐专业 MQ

Redis 在项目里不是只有缓存这一种用法。
它真正的价值在于:用合适的数据结构解决合适的问题,把高频读、临时状态和高并发辅助逻辑从数据库压力中拆出来,同时又不把核心数据完全交给内存缓存。

📌 码字不易,技术干货深度复盘!

如果这篇文章帮你看清了 MyBatis-Plus 查询的底层底细,别忘了 点赞、关注、收藏 三连走一波!支持作者不迷路,更多底层源码干货持续输出中!🚀

让我们一起学习面试知识,拿到自己想要的offer!

http://www.jsqmd.com/news/950668/

相关文章:

  • 太香了!指纹浏览器指纹防检测原理,分钟搞懂技术真相前言在跨境电商多账号运营、社交媒体矩阵管理等场景中,指纹浏览器已经成为必备工具。但很多人只知道要用指纹浏览器“,却不清它到底是如何工作的。本文将深入讲
  • 项目管理PDCA 是什么,如何在不同项目阶段的应用PDCA?
  • 模胚优质厂家:如何选对技术合作伙伴? - 昌晖模胚
  • 系统架构设计师-系统可靠性模型计算全解析
  • 3分钟解决Windows热键冲突:Hotkey Detective终极实用指南
  • 2026 年 6 月证券从业自学通关秘籍:全周期工具实测全解 - 讲清楚了
  • 5步打造你的AI象棋教练:Vin象棋深度学习实战指南
  • MySQL binlog Retention, Rotation Purge: Production Guide (2026)
  • 资源宝 网址更新说明
  • 2026年北京钢板租赁厂家推荐榜单:丰台/朝阳铺路钢板出租,工地路基钢板,市政管网施工钢板,防滑/加厚钢板租赁公司精选推荐 - 品牌企业推荐师(官方)
  • 实战演练,基于快马平台用reasonix构建智能课程推荐系统
  • 如何用Ice打造整洁高效的Mac菜单栏:终极管理指南
  • 2026 年 6 月软考备考神器实测:真题 / 章节 / 时间管理全攻略 - 讲清楚了
  • 如何快速解密RPG Maker MV游戏资源:开发者的3种终极解决方案
  • 2026上海奉贤/金山/青浦/松江瓷砖空鼓怎么修?本地免砸砖修复方法大全 - 苏易修缮
  • 落地护眼台灯哪个品牌好?闭眼入高性价比护眼灯推荐,禁止噱头!
  • 深圳鑫大地:金属冰箱贴定制优选工厂,15年匠心打造有温度的纪念好物 - 中媒介
  • 利用快马平台十分钟搭建YOLOv8目标检测原型系统
  • 2026苏州吴江/昆山瓷砖拱起越来越严重?如何阻止持续扩散 - 苏易修缮
  • GLM-5工程化落地实测:国产大模型推理部署全链路解析
  • 今天的日常
  • 腾讯TBS X5内核集成避坑指南:从‘提取微信’到‘官方静态集成’的演进与最佳实践
  • 2026年天津劳动律师哪家好?5位实战经验丰富值得推荐 值得信赖 - 本地品牌推荐
  • HTTP 完全指南(一):请求与响应报文结构深度详解
  • 为什么鲜果鲜榨的山茶油有一股类似哈喇味的怪味? - 中媒介
  • Docker--管理监控平台的应用
  • 执业医师考试哪个课程好?按专业、科目和基础精准匹配 - 医考机构品牌测评专家
  • 如何快速在Windows上安装安卓应用:APK Installer终极指南
  • windows文件资源管理器进入文件夹时加载缓慢问题优化
  • 2026年最新口碑手机阅读器排行榜,哪款才是你的最佳选择?