并发防止重复提交

项目中遇到了服务器接口重复被调用的情况,导致数据多次提交的问题。对于请求的重复提交,前端有一些治标的办法,后台也有一些常规的token验证。但是在并发的情况下,一些传统的办法失去了作用。

1、比如说前台js控制,如果遇到恶意攻击,通过接口无限并发请求,数据还是会出问题。

2、session里面存token的方式还是有问题,如果本身打开了2个页面,一个页面提交了一个请求,此时服务器把token改变,那另外一个页面获取的token就失效了。

 

下面是我想到的一些办法,高手轻拍:

由于我接口的逻辑是先查询数据库,看看数据是否有某种标志,满足则进入插入数据步骤。
导致在并发的时候大家查数据的时候都满足,都进入了插入数据步骤,导致重复插入。

现在的办法是利用数据库的update对行进行加锁,如果数据被锁,则执行下一条数据。

比如有10条数据需要处理,2个线程进来,数据1被线程1锁定,那线程2就处理数据2,以此类推。

根据这个情况,我发现可以根据这个特性对数据进行分片处理。那就是在接口逻辑本身,对数据操作的时候就开多个线程同时跑,反正有锁,不用担心会重复执行,但是效率上提高了很多。最终把每个线程成功的结果返回,最终汇总和原始数据比较是否一致,一致的话就处理完成,不一致找出失败的进行提示。由于我只是对数据批量插入,不用管是否有失败的数据要回滚之类的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值