HTTP哪些方法是幂等的?
- GET方法:GET不管怎么调用对资源本质没有影响,所以是幂等的
- HEAD方法:获取响应的头信息,对资源也没影响,所以是幂等的
- OPTIONS方法:获取URL所支持的方法,对资源没有影响,所以是幂等的
- DELETE方法:删除一次和多次都是一样的效果,多次调用对资源的作用是相同的,所以幂等
- POST方法:用于创建资源,多次调用和一次调用效果不一样,所以不是幂等
- PUT方法:用于更新操作,多次更新某个id信息,其实最终效果一样,所以是幂等的
小结:主要是看我多次调用和一次调用对资源影响是否一致。一致就是幂等,不一致就是非幂等
幂等性实现方式
新增类幂等性控制
预生成ID
针对工单、订单提交这里业务,可以在订单、工单未提交前预先为其生成一个ID,系统中记录id是否已提交成功。
当用户重复提交时,可以通过id找到对应提交状态。防止重复提交
select+唯一索引冲突
对于关系绑定这块可以通过代码中先查询的方式杜绝非并发场景下的重复绑定问题,但是无法杜绝并发情况下的重复绑定,此时可以在数据库设置唯一索引。这样当出现并发时,数据库这块会报错,帮我们杜绝重复绑定问题
修改类幂等性控制
状态机(乐观锁的方式)
状态机就是在更新状态时需要判断状态是否为前置状态,是前置状态才允许更新。本质上状态机的方式就是乐观锁,其版本号就是状态
update transfr_flow set status=2 where biz_seq=‘666’ and status=1;