SpringBoot + 消息生产幂等 + 唯一 ID 去重:前端重复点击,后端只处理一次
引言:重复提交的噩梦 去年公司的秒杀系统因为用户疯狂点击"立即购买"按钮,导致同一个订单被重复提交了10次。虽然前端做了按钮禁用,但用户可以通过刷新页面、网络重试等方式绕过限制。最终导致库存超卖,用户投诉,运营背锅。 重复提交是 Web 应用中常见的问题,特别是在以下场景: 用户快速点击提交按钮 网络超时导致用户重复提交 浏览器后退后重新提交 前端表单重复提交 **幂等性(Idempotence)**是解决这个问题的关键。一个幂等的操作,无论执行多少次,结果都是一样的。 本文将带你深入理解幂等性,并使用 Spring Boot + Redis 实现一套完整的幂等性控制方案。 一、幂等性:概念与重要性 1.1 什么是幂等性? 定义:一个操作,无论执行一次还是多次,其产生的结果都是相同的。 数学表达:f(x) = f(f(x)) 生活中的例子: 幂等操作:设置手机铃声(无论设置多少次,结果都是同一铃声) 非幂等操作:银行转账(转100元,转两次就是200元) 1.2 HTTP 方法与幂等性 HTTP 方法幂等性说明 GET✅ 幂等获取资源,多次获取结果相同 HEAD✅ 幂....