背景:
在开发产品,交付给用户使用之后,重复提交的现象偶尔或经常出现。开发人员觉得数据重复,用户觉得订单多了一个,产品觉得有bug。这可不是好现象。

下面以创建订单为例:

原因:
1、误操作两次点击下单按钮;
2、超时导致重复点击;
3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息,重新下单。

后果:
当然是产生了重复订单,体验不好,影响不好。^_^

解决方案:

  1. 最通用的方法:幂等处理。
    简单来讲,在用户开始进入订单流程时,就在客户端产生一个dupKey,做为跟踪。
    数据库里订单表加一个dupKey字段,做一个唯一约束。
    在客户端点击创建订单时,后台的接口应该在创建订单之前检测表里的dupKey。
    如果不存在,就表明是新单子,新增一条记录,并返回该记录。否则把dupKey对应的订单返回到前端。同时返回记录里需要加上是否是重复下单的字段isDupRequest=true。所以后端接口可以命名为:createOrGet()
    这种方案简单有效。

  2. 如果客户下单流程走一半,因其它原因重头开始,又走了一遍流程。这样的体验就不大好了。
    我们可以把客户下单的重要信息缓存起来。在醒目的位置提醒一下用户还有一个未完成的订单,通过短信通知或者其它APN通知渠道都可以。这样客户点击这个提醒之后,会进入未完成的流程,会节省很多操作。应该也会促进订单的成功率。

  3. 人工方式
    这种方式就比较简单粗暴了。开发的后台管理可以操作订单,删改订单、退款等。但是线上运行的时候,牵涉的人比较多。客户上报问题=>运管人员核查问题=>开发人员排查问题=>运营人员解决问题。

防止重复请求提交创建订单等解决方案相关推荐

  1. 10天手敲一个SpringBoot网上商城项目(九)—— 确认订单、创建订单功能的实现及AOP

    静态资源及sql文件分享 链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr 提取码:23gr 文章目录 确认订单 1.确认订单-持 ...

  2. 高并发重复请求的去重处理

    最近碰到一个重复提交请求,并能在数据库重复插入多条同样数据的问题.因为需求涉及到的是给用户发放购物卡,直接关系到的是金钱,所以是影响很大的一个问题,比如给一个用户发放100元一次,结果被某些居心不良之 ...

  3. 接口防止重复提交,订单避免重复下单

    一.Java防止频繁请求.重复提交的操作代码(后端防抖操作) 在客户端网络慢或者服务器响应慢时,用户有时是会频繁刷新页面或重复提交表单的,这样是会给服务器造成不小的负担的,同时在添加数据时有可能造成不 ...

  4. 设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)

    关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求.而这样的重复请求如果是幂等的(每次请求的结果都相同,如查询请求),那其实对于我们没有什么影响,但如果是非幂等的(每次请求都会对 ...

  5. ajax 提交订单,php-在Woocommerce 3中通过ajax提交并在结帐时创建订单

    我在结帐表单中添加了一个按钮: 并在functions.php文件中添加了一个AJAX代码段: add_action('wp_head', 'ajax_call_place_order'); func ...

  6. 如何从旧提交创建新的Git分支? [重复]

    本文翻译自:How do I create a new Git branch from an old commit? [duplicate] Possible Duplicate / a more r ...

  7. java客户端重复请求_Java后台防止客户端重复请求、提交表单实现原理

    Java后台防止客户端重复请求.提交表单实现原理 发布于 2021-1-8| 复制链接 摘记: 这篇文章主要介绍了Java后台防止客户端重复请求.提交表单实现原理,文中通过示例代码介绍的非常详细,对大 ...

  8. Java后台防止客户端重复请求、提交表单

    在Web / App项目中,有一些请求或操作会对数据产生影响(比如新增.删除.修改),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱. 常见处理方案 1.客户 ...

  9. 分布式架构:并发重复请求和幂等场景技术实现总结

    分布式架构:并发重复请求和幂等场景技术实现总结 原文:分布式架构:并发重复请求和幂等场景技术实现总结 概念 重复请求是指一个请求因为某些原因被多次提交,场景简述如下: 1)用户快速多次点击按钮 2)N ...

最新文章

  1. php mongo二级查询时间,php查询MongoDB遇到长整型的问题
  2. Linux 搜索指令
  3. 九、表达式求值(1)
  4. shell基础之if语句
  5. PHP对URL进行字符串编码
  6. elxel表格纸张尺寸_纸张知识|克重厚薄多少,正度大度纸开本尺寸规格是什么大小,和A4有啥区别?...
  7. HTTP响应头和请求头信息对照表(一篇全)
  8. OSI七层网络模型浅析
  9. linux limit
  10. SpringSecurity +Jwt 实现权限管理
  11. ajax提交整个form表单
  12. 解决“应用程序无法启动,因为应用程序的并行配置不正确“问题
  13. VC2005编译优化选项之玄机
  14. 计算机网络中的所谓资源是指硬件软件资源,计算机网络试题..doc
  15. 计算机工控机配置,研华工控机最新配置IPC-610
  16. CSS实现div垂直居中 div上下居中显示
  17. Excel单元格设置选择项
  18. input·触发回车事件
  19. CCSC考试基本情况
  20. 3 分钟带你看懂 Acala EVM

热门文章

  1. 金蝶KIS专业版启用后修改允许负库存sql语句
  2. 一个快速去除黑背景和其他颜色背景,生成透明PNG图的小工具
  3. JAVA计算机毕业设计外贸服装订单管理系统(附源码、数据库)
  4. DevOps VS 职责分离
  5. 天猫整站Springboot 从零开始搭建(一)
  6. Got fatal error 1236 from master when reading data from binary log:
  7. Unity通过Shader遮罩实现边缘羽化和异形视频播放
  8. 兰州一中计算机教室,兰州一中2019年中青年教师研究课暨高考复习研讨课活动...
  9. 巅峰Q神个人版 V7.8(最新)
  10. JS中的位操作符:“与,或,非,异或,左移,右移”