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

面试中被嘲笑Token放在Redis里?这把给我干沉默了...

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

点击关注#互联网架构师公众号,领取架构师全套资料 都在这里

0、2T架构师学习资料干货分

上一篇:2T架构师学习资料干货分享

大家好,我是互联网架构师!

面试被问登录认证怎么做,你说"Token 放 Redis 里"。面试官笑了一下,说你不懂 JWT 的无状态设计。

这场景不少见。知乎上有人专门问过,底下争了半天,说的其实是同一件事:选型没问题,但你没说清楚为什么选。

这篇文章把这件事说清楚:从 JWT 是什么,到放 Redis 的原因,再到面试里怎么回答。

JWT 到底是什么

JWT 全称 JSON Web Token,说白了就是一段字符串,用点号分成三段:Header、Payload、Signature。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的三段结构:Header(算法类型)、Payload(用户信息)、Signature(签名),三部分Base64编码后用点号连接

  • Header:声明算法类型(比如 HS256)

  • Payload:存用户信息(用户 ID、角色、过期时间)。只是 Base64 编码,不是加密——任何人拿到 token 都能解码看到内容,密码绝对不能放

  • Signature:用 Header + Payload + 服务端密钥算出来的签名,作用是防篡改

整个验证流程:

JWT认证完整流程:用户登录→服务端签发Token→客户端存储→请求时带上Token→服务端验签

登录成功 → 服务端签发 Token → 客户端保存(一般放 localStorage)→ 每次请求在 Header 里带上Authorization: Bearer <token>→ 服务端验签,从 Payload 取用户信息。全程不查数据库、不查 Redis,自给自足。这就是"无状态"的意思。

JWT"无状态"的代价:四个致命场景

无状态听起来很美,上线后就知道了。

场景一:账号被盗,无法立即踢人。Token 有效期 2 小时,现在还剩 1 小时 45 分钟。怎么让它立刻失效?纯 JWT 做不到——已签发的 token 在过期前一直有效。

场景二:封禁用户不生效。账号封了,但手里的 token 还能用。

场景三:改密码不踢其他设备。用户改了密码,想让其他设备全部失效。纯 JWT 做不到。

场景四:token 过期吞表单。用户填了 20 多分钟的表单,点提交,token 过期了,整个内容全丢。

这四个场景加在一起,几乎是所有正经业务系统都会碰到的问题。

为什么要把 Token 放 Redis

解决上面这些问题,最直接的方案是黑名单

用户被踢下线时,把 token 加进黑名单。每次请求先查黑名单,在里面就拒。黑名单存哪?内存不行(多台服务器不共享,重启丢),数据库太慢(每个请求都查一次受不了),Redis 最合适——查询不到 1ms,分布式共享。

// 退出登录时,把 token 加入黑名单 public void logout(String token) { long expiration = jwtUtil.getExpiration(token); long ttl = expiration - System.currentTimeMillis(); if (ttl > 0) { redisTemplate.opsForValue().set( "blacklist:" + token, "1", ttl, TimeUnit.MILLISECONDS ); } } // 验证 token 时,先查黑名单 public boolean isTokenValid(String token) { if (redisTemplate.hasKey("blacklist:" + token)) { returnfalse; } return jwtUtil.verify(token); }

Redis 只存"已失效"的 token,平时没什么写入,查询也快。

还有更彻底的方案:直接把 token 存 Redis,每次验证都去 Redis 查。这和传统 Session 没太大区别,只是借了 JWT 格式当 Session ID 用。

黑名单 vs 白名单:两种方案的本质区别

方案

存什么

查几次 Redis

能否主动吊销

是否无状态

纯 JWT

不存

0 次

不能

JWT+黑名单

存失效的 token

1 次

不完全是

token 存 Redis(白名单)

存所有 token

1 次

黑名单相对轻量,正常请求不写 Redis,只有踢人时才写,多数业务选这个。白名单控制力更强,能做限制同时在线设备数、实时查看在线状态,代价是每次请求都依赖 Redis。

双 Token 续期方案

Token 到期了,用户正在操作怎么办?

  • AccessToken:有效期短(30 分钟),做实际鉴权

  • RefreshToken:有效期长(7 天),只用来换 AccessToken

AccessToken 过期,前端用 RefreshToken 换新的,对用户无感。RefreshToken 存 Redis,用户改密码就删掉,自动让他下次操作时重新登录。

Redis 本身可靠吗

有人担心引入单点故障。Redis 的高可用方案跑了十几年:

  • Sentinel(哨兵模式):主节点挂了自动选新主

  • Cluster(集群模式):数据分片,横向扩展

Redis Cluster架构:数据分片分布在多个节点,支持横向扩展和自动故障转移

性能方面 Redis 单次查询 1ms 以内,单机 QPS 十几万。说"不能放 Redis 因为会单点故障"——这逻辑说不通。

面试官到底在嘲笑什么

两种情况。

第一种:你用了 JWT 但验证时完全不走签名,每次都去 Redis 查 token 是否存在。这等于只借了 JWT 格式,没用它的能力——不如直接生成随机字符串当 Session ID,还省了编解码开销。面试官嘲笑的是这里。

第二种:你确实有业务需求需要主动吊销,选了 JWT+Redis 方案。但面试里只说了"放 Redis",没说为什么。面试官误以为你不懂无状态设计。

第一种要改方案,第二种要改表达。

纯 JWT 什么时候真的合适

跨服务调用:网关层做一次验签,用户信息往下游传。订单服务、支付服务直接从 JWT 取 userId,不用再查 Redis。这里 JWT 承担的是身份传递角色,不是管理登录会话。

一次性凭证:邮箱验证链接、密码重置链接、临时分享链接。签一次用一次,不需要续期和吊销。

安全要求不高的内部工具:用户量少,不需要踢人下线。纯 JWT 省一层依赖。

面试怎么答

别上来就说"放 Redis",也别上来就说"JWT 无状态"。

先说业务需求:需不需要主动踢人?改密码后需不需要其他设备立刻失效?需不需要限制同时在线设备数?

然后根据需求说方案:需要的话选 JWT+Redis 黑名单,说清楚纯 JWT 做不了主动吊销;不需要的话纯 JWT 够了,说清楚签名验证流程和密钥管理。

面试官真正想听的不是你选了哪个,是你知不知道每个方案的边界。"Token 放 Redis"这件事本身没问题,问题是说不出来为什么放。

1、2T架构师学习资料干货分享

2、10000+TB资源,阿里云盘,牛逼!!

3、基本涵盖了Spring所有核心知识点总结

· END ·

最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。

如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描上方二维码关注一下,您的支持是我坚持写作最大的动力。

求一键三连点赞、转发、在看

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

相关文章:

  • 北航毕业论文LaTeX模板:3天掌握专业排版,告别格式焦虑
  • SolidWorks自学day1-自留
  • 通过模型广场的直观对比与快速切换找到最适合当前任务的模型
  • 信创操作系统深度对比:统信UOS vs 麒麟OS vs openEuler,企业级选型指南
  • 广州婚纱照推荐|深耕品质美学,解锁多元婚拍新体验 - 品牌评测官
  • ARMv8/v9虚拟化核心:SCTLR_EL2寄存器详解与配置实践
  • 抖音批量下载器终极指南:3分钟掌握无水印高效下载技巧
  • OpenRGB:终结RGB灯光管理混乱的终极免费方案
  • 健康系列: 有机食品是什么?
  • 5G网络仿真软件哪个更高效?Ranplan两款核心产品深度解析
  • ColabFold深度解析:如何在云端解锁蛋白质结构预测的民主化革命
  • 全国网站开发服务商哪家好?2026年有实力的网站开发公司盘点 - 麦麦唛
  • 天津离婚财产分割权威律师:家理姜春梅,专注婚家 10 年 + - 外贸老黄
  • 10分钟搭建微信小程序商城:海风小店开源方案完全指南
  • AArch64 SCTLR_EL3寄存器解析与安全配置实践
  • 构建你的第一个中文手写识别系统:免费开源数据集完整指南
  • Armv8/v9架构SCTLRMASK_EL2寄存器解析与应用
  • 浙江大电流端子/电压端子厂家有哪些?2026年浙江直插式/回拉式接线端子厂家推荐|浙江端子板源头厂家推荐:连的智能领衔 - 栗子测评
  • 抖音资源下载终极指南:3步免费搞定无水印批量下载
  • 深度解析:PC消光剂——原理、应用与实践方案 - 资讯速览
  • 每日热门skill:Firecrawl深度研究报告-AI时代的网页数据抓取神器
  • 5个步骤彻底解决FanControl风扇控制软件配置崩溃问题
  • 内卷时代,品牌官网如何成为企业突围的“第二增长曲线”?
  • 2026现阶段太原万柏林区全屋定制哪家强?索菲亚旗舰店服务揭秘 - 2026年企业推荐榜
  • 证件照怎样快速换背景?2026年证件照背景更换软件对比与推荐指南 - AI测评专家
  • 七年时间,我们和苏妈握手了!
  • 上海名牌首饰回收推荐:2026 五大平台专业度与安全性测评 - 李宏哲1
  • Armv8/v9架构系统寄存器解析:SCXTNUM与SMCR深度剖析
  • QQ数据库解密完全指南:如何安全提取你的聊天记录密钥
  • 南京服务中心〔2026〕​ 2026年5月南京实地核验:浪琴腕表表壳磕碰修复服务项目及收费标准公示 - 亨得利官方维修中心