Token高并发解决方案

一:作为token使用的第三方 客户端模式使用token

可以采用单例模式或定义一个全局变量isRefresh 标志,加同步锁Synchronized来保证token过期的那个时间点,刷新token方法只被调用一次。

二:作为token服务器端:

后端方案:利用 Redis 缓存

当同时发起多个请求时,第一个接口刷新了 Token,后面的请求仍然能通过请求,且不造成 Token 重复刷新。那么,后端在用户第一次登录时,需要将生成的 Token 数据(token 和 createTime)缓存一份到 Redis 中。

当 Token 过期时,重新生成新的 Token 数据并更新 Redis 缓存,同时在 Redis 中设置一条 Token 过渡数据并设置一个很短的过期时间(比如 30s)。如果后面的请求发现 Token 已经被刷新了,就判断 Redis 中是否存在 Token 过渡数据,存在就放行,这样同一时间的请求都可以通过。

后端使用Redis解决

同时多个接口请求,第一个接口刷新了 Token,后面的请求还是携带的刷新前的旧 Token

后端要解决这个情况,应该再添加一个刷新 Token 的过渡期,在刷新 Token 的时候,在 Redis 同时设置一条过渡期数据,视情况设置 15S 过期(这个时间看情况设置),然后认证的时候先判断这个 Token 是不是还在过渡期内,是的话就直接放行通过。

大概的意思的刷新Token后,应该再添加一个刷新 Token 的过渡期,在 Redis 同时设置一条过渡期数据,设置 15S 过期(这个时间看情况设置),然后首先判断下Redis中是否存在这个Token,存在就放行,这样同一时间的请求就都可以通过了。

前端解决方案:

前端使用axios解决

同时发起多个请求时,其他接口如何重试,两个接口几乎同时发起和返回,第一个接口会进入刷新 Token 后重试的流程,而第二个接口需要先存起来,然后等刷新 Token 后再重试。同样,如果同时发起三个请求,此时需要缓存后两个接口,等刷新 Token 后再重试。由于接口都是异步的,处理起来会有点麻烦。

当第二个过期的请求进来,Token 正在刷新,我们先将这个请求存到一个数组队列中,想办法让这个请求处于等待中,一直等到刷新 Token 后再逐个重试清空请求队列。

那么如何做到让这个请求处于等待中呢?为了解决这个问题,我们得借助 Promise。将请求存进队列中后,同时返回一个 Promise,让这个 Promise 一直处于 Pending 状态(即不调用 resolve),此时这个请求就会一直等啊等,只要我们不执行 resolve,这个请求就会一直在等待。当刷新请求的接口返回来后,我们再调用 resolve,逐个重试。

参考文章:

关于token的总结和思考——并发访问刷新策略,jwt过期及作废问题
JWT生成token及过期处理方案
Token 刷新并发处理解决方案

Token高并发解决方案相关推荐

  1. 高并发编程(四)高并发解决方案从前端到数据库

    1. 高并发和大流量解决方案 高并发架构相关概念 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理 ...

  2. JavaWeb 并发编程 与 高并发解决方案

    在这里写写我学习到和自己所理解的 Java高并发编程和高并发解决方案.现在在各大互联网公司中,随着日益增长的互联网服务需求,高并发处理已经是一个非常常见的问题,在这篇文章里面我们重点讨论两个方面的问题 ...

  3. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

  4. Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...

  5. [转]淘宝下单高并发解决方案

    周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享.这里我把淘宝下单高并发解决方案的个人理解分享一下.我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. ...

  6. 关于SQL SERVER高并发解决方案

    现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...

  7. 打车业务下单高并发解决方案

    简介: 打车业务下单高并发解决方案 前言 在技术领域有一条准则,即不存在银弹技术.在实际工作中,通常无法通过几项简单的技术组合就解决实际业务中各种场景下的复杂问题.虽然追求架构的简单简洁也是架构师的目 ...

  8. 高并发解决方案--负载均衡

    高并发解决方案--负载均衡 1,什么是负载均衡? 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首 ...

  9. 【java】 java 高并发解决方案和高负载优化方法

    [java] java 高并发解决方案和高负载优化方法 参考文章: (1)[java] java 高并发解决方案和高负载优化方法 (2)https://www.cnblogs.com/lonelywo ...

最新文章

  1. 一文读懂Faster RCNN
  2. Keras【Deep Learning With Python】逻辑回归·softmax多分类与交叉熵
  3. VTK:结构化网格之VisualizeStructuredGridCells
  4. 记一次mogodb占用cpu高问题
  5. 各个硬件指令集使用简单介绍
  6. 探索 .Net Core 的 SourceLink
  7. 一起开心寒假训练总复习
  8. php 选股器,RSI切线突破选股指标(TDX)..
  9. linux内核实现ipsec,IP XFRM配置示例:利用linux kernel自带的IPSec实现,手动配置IPSec...
  10. [死亡笔记]某傻逼的错误实况
  11. 如何准备数学建模,那些数学建模中我们踩过的坑(万字自述国赛美赛经历)
  12. Windows系统连接Linux的常用网管工具下载
  13. 3D打印机USB联机打印是如何实现的?(以Cura插件USBPrinting为例)
  14. Linux下的SD卡分区--解决sd卡分区损坏
  15. 树莓派CM4基于emmc安装Ubuntu系统及初始配置
  16. 二维码门禁(ssm做后台)
  17. 使用cmd命令远程重启服务器
  18. 中煤哈密智能汽车电子衡系统过磅流程
  19. FileReader与FileWriter使用一例
  20. 基于android的远程视频监控系统

热门文章

  1. CAN与CANO的基本概念
  2. CSS---引入CSS代码的四种方式
  3. 容器隔离技术_在隔离区捡拾钢琴的技术提示
  4. Go语言学习之旅--gorm(一)
  5. wind7 管理员权限设置方法
  6. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
  7. 小程序多行文本折叠展开
  8. android wear 神奇宝贝,神奇宝贝宝可梦手游安卓版下载
  9. potplay播放突然变得模糊
  10. 20年前毁誉参半的网游《传奇》,背后是怎样的故事?