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

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

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

    **使用场景:


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

    **常用解决方案

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

  • 相关阅读:
    匈牙利算法-二分图的最大匹配
    UOJ 407(IOI2018 D1T3)
    UOJ 460
    UOJ 405(IOI2018 D1T1)
    Codeforces 1110E
    2.文件结构
    1.常用快捷键
    Python3.x和Python2.x的差异
    javascript 常用内置对象
    94. Binary Tree Inorder Traversal(非递归实现二叉树的中序遍历)
  • 原文地址:https://www.cnblogs.com/niew/p/13429810.html
Copyright © 2011-2022 走看看