幂等性概念
一个操作如果多次任意执行所产生的影响(或者叫副作用),都是相同的。
场景
在订单提交页面,因网络问题,导致订单处理延时,用户在无反应的情况下,多次点击提交按钮,会在订单库中插入重复的订单。
方案一 token+Redis
用户在进入表单提交页面前,向支付系统申请token,后端将token存储到redis中,如果前端提交表单,后端验证token,如果存在,则表示第一次提交,如果不存在,则是第二次提交,给予对应处理
方案二 唯一索引
数据库设置订单号为唯一索引值,比如前端生成订单号,后端无法第二次提交插入数据请求。
(注意:前端需要根据订单内容改变,而改变订单号,保证订单号为当前订单唯一ID)
方案三 队列缓冲
讲请求都接收,通过缓冲队列,后续异步处理,过滤掉重复请求,然后保存数据库处理,
(注意:异步处理不能及时返回请求结果,需要后续轮询处理结果)
·
·
·
·
·
「如果你有什么思路,可以浏览大家一起讨论」