如何避免用户点击过快生成多个订单

用户点击按钮过快会生成多个订单 如何避免这种操作

阅读 2.6k
3 个回答

这种是比较经典的幂等性问题,网上可以查到各种各样的解决方案,这里提供一下我自己的思路

  1. 订单id由前端进行生成
  2. 后端可以设置多重屏障防止重复提交
  3. 第一道屏障:可以通过redis等缓存服务缓存该订单id,且对应的过期时间为1秒,当在1秒内接收到的同一个订单id的请求视为相同请求,直接返回"请勿点击过快"等提示信息
  4. 第二道屏障:在mysql等关系型数据库中设置主键/唯一键,订单id不允许重复插入

提供两种方法:

  • 按钮点击后,加入 loading 效果,提交之后进入成功或失败环节
  • 前端表单增加 requestId,服务端检查,同一 id 不能多次提交
  • 纯前端方案:

    • 用户点击后,里面跳转。不给多次点击的机会。防抖节流标配
  • 后端方案:

    • 做分布式锁。根据 hash(userId + 接口 + 参数) 做为key,短时间限制并发数
  • 前后端方案:

    • 每次页面加载表单时,请求后端获取token,该token仅能使用一次。防止同一表单多次提交
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题