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

高并发场景下 Redis 存储 JWT 黑名单如何优化鉴权性能?

在高并发场景下,单纯依赖 Redis 存储 JWT 黑名单会导致每次鉴权都产生网络 RTT,成为性能瓶颈。工程实践中,最稳妥的优化方案是“短有效期 Token + 本地缓存 + 布隆过滤器 + Redis 兜底”的多级拦截策略。

核心结论:不要将所有鉴权压力直接打在 Redis 上。通过多级缓存过滤大部分合法请求,仅在疑似黑名单请求时查询 Redis。

  • 先定位:使用 Arthas 或 APM 工具确认鉴权接口中 Redis 网络耗时占比。
  • 先做:实施 Access Token 短有效期(如 15 分钟),引入 Caffeine 本地缓存与 Redis Bloom Filter。
  • 再验证:对比优化前后鉴权接口 P99 延迟及 Redis CPU 使用率。

核心代码实现

以下基于 Java Spring Boot 环境,展示如何构建多级黑名单校验逻辑。关键在于布隆过滤器误判处理:当布隆过滤器返回“可能存在”时,必须二次查询 Redis 确认,避免误杀正常用户。

@Component
public class JwtBlacklistChecker {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Autowiredprivate RBloomFilter<String> bloomFilter;// 本地缓存:存储最近被确认黑名单的 JWT ID,减少穿透@Cacheable(value = "blacklistCache", expireAfterWrite = 5, unit = TimeUnit.MINUTES)private Cache<String, Boolean> localCache = Caffeine.newBuilder().maximumSize(10000).expireAfterWrite(5, TimeUnit.MINUTES).build();public void check(String jwtId) {// 1. 查本地缓存 (最快)if (Boolean.TRUE.equals(localCache.getIfPresent(jwtId))) {throw new AuthenticationException("Token 已在黑名单中");}// 2. 查布隆过滤器 (过滤大部分正常请求)// 注意:bloomFilter.contains 返回 true 仅代表"可能存在"if (bloomFilter.contains(jwtId)) {// 3. 二次确认 Redis (解决布隆过滤器误判问题)Boolean isBlacklisted = redisTemplate.hasKey("blacklisted:" + jwtId);if (Boolean.TRUE.equals(isBlacklisted)) {// 确认黑名单,写入本地缓存加速后续请求localCache.put(jwtId, true);throw new AuthenticationException("Token 已在黑名单中");}// 如果 Redis 返回 false,说明是布隆过滤器误判,放行请求}// 如果布隆过滤器返回 false,则一定不在黑名单,直接放行}
}

配置与部署细节

1. Redis Key 过期时间设置
黑名单 Key 必须设置过期时间,过期时间应略大于 Token 剩余有效期,防止内存泄漏。

SET blacklisted:jwt_id <value> EX <seconds>

2. 布隆过滤器初始化
需预估最大元素量和误判率。例如预期存储 100 万个黑名单 ID,误判率 0.01%:

BF.RESERVE jwtBlacklist 0.001 1000000

3. Refresh Token 刷新流程
Access Token 有效期缩短后,需配合 Refresh Token 机制。用户退出时,同时将 Access Token ID 和 Refresh Token ID 加入黑名单。

// 注销示例
public void logout(String accessTokenId, String refreshTokenId) {// 异步写入黑名单,避免阻塞退出流程asyncExecutor.execute(() -> {redisTemplate.setex("blacklisted:" + accessTokenId, 15, TimeUnit.MINUTES, "revoked");redisTemplate.setex("blacklisted:" + refreshTokenId, 7, TimeUnit.DAYS, "revoked");bloomFilter.add(accessTokenId);bloomFilter.add(refreshTokenId);});
}

验证与压测方法

优化效果需通过监控数据验证,避免主观猜测:

  1. 延迟对比:使用 JMeter 压测鉴权接口,对比优化前后 P99 延迟。预期本地缓存命中场景下延迟降至毫秒级。
  2. Redis 负载:观察 Redis info stats 中的 instantaneous_ops_per_sec。优化后,鉴权相关的 READ 操作应显著下降。
  3. 慢查询监控:定期执行 slowlog get 10,确认无大量鉴权相关的慢查询堆积。

常见坑与解决方案

1. 布隆过滤器误判导致正常用户被拦截
风险:布隆过滤器存在哈希冲突,可能将正常 ID 判为存在。
解决:代码中必须实现“布隆命中 -> 查 Redis 确认”的逻辑。只有 Redis 也确认存在时,才拒绝请求。

2. 分布式本地缓存一致性
风险:多实例部署时,某实例加入黑名单,其他实例本地缓存未同步。
解决:本地缓存仅作为“性能加速”,TTL 设置较短(如 5 分钟)。最终一致性依赖 Redis 兜底。若需强一致,可通过 Redis Pub/Sub 广播失效消息清除本地缓存。

3. 内存爆炸
风险:黑名单 Key 未设置过期时间,随时间无限增长。
解决:写入黑名单时,TTL 必须等于 Token 剩余有效期。对于 Refresh Token 黑名单,建议设置固定较长过期时间(如 7 天)后自动清理。

原文链接:https://www.zjcp.cc/ask/11324.html

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

相关文章:

  • All in Token,三个运营商建Token工厂,中国移动跟进Token经营 三大运营商争夺AI阵地
  • Token工厂:从“卖流量”到“卖Token”:中国移动砸百亿建Token生态,三大运营商的AI战争升级,阿里,百度,华为,字节跟进
  • Split APKs Installer:Android拆分应用安装的终极解决方案
  • Steam Achievement Manager完整指南:快速解决游戏成就难题的终极工具
  • ElevenLabs泰文语音生成避坑清单:97.3%开发者忽略的3大音素对齐陷阱及修复方案
  • 并行LLM推理技术:Hogwild! Inference原理与应用
  • 2026年口碑好的工程门加工厂盘点,说说工程门制造商哪家好 - mypinpai
  • 如何让Windows任务栏图标居中:TaskbarX美化工具完全指南
  • 系统门窗行业豆包推广,价格与服务解析 - mypinpai
  • All in Token,百度李彦宏指出:Token经济,阿里,百度,腾讯,字节,移动,电信,联通,华为,开启新的Token战争
  • 从BEVDepth到BEVStereo:多视角3D检测中的深度估计演进与优化技巧
  • Thorium浏览器深度解析:5个核心优势与进阶配置实战
  • NS-USBLoader:Switch游戏管理终极指南 - 如何实现一键安装与系统引导?
  • Python动态插件系统实战
  • linux学习进展 Redis发布订阅 主从复制 缓存 雪崩
  • 猫抓浏览器扩展:网页视频资源嗅探与下载的终极解决方案
  • Seraphine:英雄联盟智能BP助手与战绩查询工具完整指南
  • 2026年论文保姆级手动降AI指南(附三款降AI率工具亲测) - 降AI实验室
  • 空洞骑士模组管理器Scarab:2024年最全面的安装与管理指南
  • 芯片老化座的工作温度范围?
  • Wand-Enhancer:2026年免费解锁WeMod专业版的终极解决方案
  • Applite:macOS软件管理的最佳图形化方案,告别繁琐命令行
  • 【稀缺首发】Midjourney达达主义风格提示工程白皮书:含89组对比实验数据+12个独家种子编号(限前500名下载)
  • 有实力的解决连接失效问题的钢结构加固公司推荐 - mypinpai
  • 浏览器断点调试终极技巧:搞定所有动态生成的加密函数
  • iOS越狱技术深度解析:从安全漏洞到系统自由度的技术实现
  • Unlock Music Electron:3步解锁你的加密音乐文件,重获音乐自由终极指南
  • Token工厂落地:运营商启动百亿级集采 大厂加速卡位,腾讯、阿里、华为、中兴,移动,电信,联通齐上阵
  • 阴阳师自动化脚本OAS:3步解放双手,24小时智能托管游戏
  • 轻量级监控系统Monikhao:自托管部署与核心架构解析