zoukankan      html  css  js  c++  java
  • 表单重复提交问题(接口幂等性)

      近期工作中遇到用户重复提交表单信息情况,尤其是在网络延时的情况下,用户点击提交按钮后,页面迟迟未响应,于是就会再次点击提交按钮。这样就导致产生重复数据,会对后续的业务带来一定问题。为此,查了一些资料,学习总结了下相关问题的解决思路。

      首先,重复提交的问题,专业点的说法叫做接口幂等性问题。一个接口, 多次发起同一个请求,必须保证操作只能执行一次;出现这类问题的常见业务场景有:  

    **使用场景:


      1.订单接口(不能多次创建同一订单)
      2.支付接口, 重复支付同一笔订单只能扣一次钱
      3.支付宝回调接口,可能会多次回调, 必须处理重复回调
      4.普通表单提交接口,因为网络超时等原因多次点击提交, 只能成功一次等等

    **常用解决方案

      1.唯一索引 -- 防止新增脏数据
      2.token机制 -- 防止页面重复提交
      3.悲观锁 -- 获取数据的时候加锁(锁表或锁行)
      4.乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据
      5.分布式锁 -- redis(jedis、redisson)或zookeeper实现
      6.状态机制 -- 状态变更, 更新数据时判断状态

  • 相关阅读:
    AD20改变pcb图纸大小方式
    ceph相关概念
    五种IO模型和三种实现方式
    MongoDB入门
    GO通过sqlx库操作MySQL
    Go原生sql操作MySQL
    Traefik工作原理
    Redis主从
    Nginx入门
    Redis入门
  • 原文地址:https://www.cnblogs.com/niew/p/13429810.html
Copyright © 2011-2022 走看看