后端接口中实现重复提交验证

  1. 利用数据库是否更新验证
    新建一个字段version,每次更新的时候要求version都为0,更新后version加1,判断更新是否成功来判断是否重复提交。

  2. 基于缓存数据状态的验证(读取nosql数据需要时间,仍然会有重复)
    将更新的ID保存到nosql中,判断nosql中是否存在ID 再更新。

  3. 利用数据库唯一索引机制的验证
    新建一张表,业务ID使用唯一索引,更新数据以前,将业务ID插入该表,如果成功,再执行更新操作。

  4. 基于数据库的验证(微小概率存在重复)
    先查询数据库,验证是否第一次操作,然后更新数据。注意查询和更新之间不要做其他操作。

  5. 基于缓存的计数器验证(推荐)
    由于数据库的操作比较消耗性能,了解到redis的计数器也是原子性操作。果断采用计数器。既可以提高性能,还不用存储,而且能提升qps的峰值。
    还是以订单退款为例子:
    每次request进来则新建一个以orderId为key的计数器,然后+1。
    如果>1(不能获得锁): 说明有操作在进行,删除。
    如果=1(获得锁): 可以操作。
    操作结束(删除锁):删除这个计数器。

猜你喜欢

转载自blog.csdn.net/baojyy1/article/details/84953589