[springboot版]高并发下创建token方法时间过长

Blade 未结 2 590
qmxx
qmxx 剑圣 2022-06-28 15:29

一、该问题的重现步骤是什么?

1. 并发压力测试下通过记录各段代码执行时间,发现登录中的创建token方法耗时异常,超过了10000ms

2. 已将调整为无状态,理论上和redis无关

3.


二、你期待的结果是什么?实际看到的又是什么?

耗时正常

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

springboot版 2.8.2

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 2022-06-29 00:59

    这个需要从多个角度进行排查,比如可以主要从以下两点进行排查:


    一、将数据库调用过程暂时注释,直接固定写成调用后返回的类,再测试看看耗时多少

    二、将生成token的方法注释,直接固定写成一串文本的token,再测试看看耗时多少


    从以上两个方法就能判断出主要是数据库调用耗时多还是token生成耗时多,然后就可以着重进行优化

    0 讨论(0)
  • 2022-06-29 09:06

    已经测试,token生成的时间较长 

    作者追问:2022-06-29 09:58

    那就只能着手于减少token的字段或者重写token生成逻辑了。

    减少字段的话,可以只保留userId,但是相应的前端后端都需要修改一下,比如后端获取其他信息的时候,不能直接从token解析获取了,需要先通过userId获取User信息,然后再放到redis,从redis获取其他的比如deptId、roleId等字段。前端获取deptId、roleId的时候需要单独再调用一个接口,返回后把数据缓存到vuex内。

    如果重写token生成逻辑,这个还是比较难的,相当于去优化jjwt依赖的底层源码了。所以推荐上面的办法。

    0 讨论(0)
提交回复