-
利用数据库是否更新验证
新建一个字段version,每次更新的时候要求version都为0,更新后version加1,判断更新是否成功来判断是否重复提交。 -
基于缓存数据状态的验证(读取nosql数据需要时间,仍然会有重复)
将更新的ID保存到nosql中,判断nosql中是否存在ID 再更新。 -
利用数据库唯一索引机制的验证
新建一张表,业务ID使用唯一索引,更新数据以前,将业务ID插入该表,如果成功,再执行更新操作。 -
基于数据库的验证(微小概率存在重复)
先查询数据库,验证是否第一次操作,然后更新数据。注意查询和更新之间不要做其他操作。 -
基于缓存的计数器验证(推荐)
由于数据库的操作比较消耗性能,了解到redis的计数器也是原子性操作。果断采用计数器。既可以提高性能,还不用存储,而且能提升qps的峰值。
还是以订单退款为例子:
每次request进来则新建一个以orderId为key的计数器,然后+1。
如果>1(不能获得锁): 说明有操作在进行,删除。
如果=1(获得锁): 可以操作。
操作结束(删除锁):删除这个计数器。
后端接口中实现重复提交验证
猜你喜欢
转载自blog.csdn.net/baojyy1/article/details/84953589
今日推荐
周排行