环境:spring cloud spring boot
redis 集群
redis session会话保持
前端调用token获取接口,然后调用数据提交接口携带token,快速点击按钮多次,校验token通过,产生了两笔相同交易。
原因1:获取token接口和数据提交接口放在了一起调用,产生了两个token,在第一个交易token校验结束还没返回结果时,又调了一次获取和校验。
原因2:获取和校验没有放一起,但发起了两次校验,两次校验发到不同的服务器,从不同的redis获取到session数据,因为两次操作时间间隔太短,第一个线程改变session数据后,redis集群还没有同步数据结束,第二个线程就发起了校验,导致校验通过。
解决办法:前端增加loading控制——推荐。
后端增加延迟时间——不推荐