关于防重,我是这么设计的

重复提交问题

  • 常见原因

    • 用户手速快导致重复操作。
    • 大商户使用工具刷单。
    • 前端忘记实现防抖功能。
    • 接口失败后的自动重试机制。
    • 队列处理中的重复消费问题。
  • 可能造成的问题

    • 重复扣减库存。
    • 积分错误增加。
    • 订单被重复创建。

防重与幂等概念

  • 防重:防止重复提交,对结果没有严格要求。
  • 幂等:在防重的基础上,要求每次操作的结果都一致。

实际场景分析与解决方案

  1. 场景1:客户端重复提交

    • 原因:网络抖动、前端重复提交、页面重复进入。
    • 解决方案
      • 前端处理:确保流程不回退,实现防抖功能。
      • 服务端处理
        • 使用token机制保证请求在特定时间内的唯一性。
        • 利用CAS(比较和交换)操作避免库存或状态的重复修改。
  2. 场景2:第三方服务重复调用

    • 原因:可能是服务消费失败后的重复调用。
    • 解决方案
      • 每次请求生成唯一订单ID。
      • 使用非对称加密技术进行请求校验,防止恶意请求。
  3. 场景3:失败重试

    • 原因:支付渠道可能存在重复调用问题。
    • 解决方案
      • 根据订单号查询判断,防止长时间跨度的重复调用。
      • 使用数据库唯一索引避免并发情况下的重复问题。

总结

  • 前端下单后流程不退回。
  • 使用唯一token进行防重校验。
  • 依赖上游服务进行重复请求校验。
  • 每次下单生成新的订单。
  • 使用数据库唯一索引作为兜底措施。

相关推荐

  1. 关于这么设计

    2024-07-20 04:26:01       15 阅读
  2. 关于一份nginx-如何优化

    2024-07-20 04:26:01       26 阅读
  3. 关于经历

    2024-07-20 04:26:01       34 阅读
  4. 关于MySQL源码学习 这里一些建议

    2024-07-20 04:26:01       45 阅读
  5. 接口安全设计篡改和

    2024-07-20 04:26:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 04:26:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 04:26:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 04:26:01       45 阅读
  4. Python语言-面向对象

    2024-07-20 04:26:01       55 阅读

热门阅读

  1. python实现计数排序、桶排序和基数排序算法

    2024-07-20 04:26:01       14 阅读
  2. Carousel of Combinations

    2024-07-20 04:26:01       16 阅读
  3. VUE Pinia和Vuex的比较

    2024-07-20 04:26:01       17 阅读
  4. 前端下载文件流 出现乱码 解决方案

    2024-07-20 04:26:01       16 阅读
  5. Odoo17应用、模型、字段

    2024-07-20 04:26:01       16 阅读
  6. Python使用distutils.version的StrictVersion比较版本大小

    2024-07-20 04:26:01       15 阅读
  7. GESP CCF C++ 八级认证真题 2024年6月

    2024-07-20 04:26:01       19 阅读
  8. C++ 前向声明

    2024-07-20 04:26:01       17 阅读
  9. Python-数据爬取(爬虫)

    2024-07-20 04:26:01       16 阅读
  10. 深入理解 Vue 3 组件通信

    2024-07-20 04:26:01       22 阅读