如何解决分布式系统接口表单重复提交的问题,保证幂等性。

如何解决分布式系统接口表单重复提交的问题,保证幂等性。

一、什么叫做幂等性

幂等性:在数学上的概念指的就是N次的变换等于1次变换,通俗一点就是,做很多次同样的事情和做一次是一样的效果。

二、重复提交

1、常见的场景

1、在我们商城系统中设计到的支付,当我们对一笔订单发起支付的时候,如果第一次支付请求了,系统扣款了,但是还没有给我们用户返回数据,用户以为卡了重复点击多次,这样就会多扣款,多次操作多种结果显然不是幂等性
2、在新增一条订单的时候,用户点击了多次新增按钮,每一次请求我们都会自动生成一个主键,插入了多条数据等…,多次操作多种结果显然不是幂等性。

2、有哪些请求设计到需要处理重复提交

在我们程序的设计中,简单的来说,我们服务端的业务逻辑都是CRUD(增删查改)。
1、对于查询来说:这个服务接口的内部不包含其他的操作,仅仅是读的操作,这种业务肯定是属于幂等性的要求的。
2、对于删除来说:你多次的删除并不会造成数据的错乱,但是又得系统要求你第一次删除成功了之后提示的还是删除成功,并不是资源不存在的说法。
3、对于新增和修改就会产生幂等性问题了。

3、如何解决新增、修改、幂等性问题

1、在新增或者删除的时候,在访问服务端接口的时候客户端除了基本数据之外多送一个addId/editId这样子标识表单的数据,服务端把数据存入缓存redis中,格式为key:addId/editId,value:操作返回的数据,这样如果多次提交我们先获取redis的key判断是不是同一次相同的操作,如果是则返回value的数据,这样就可以区分是不是多次点击提交按钮。
2、什么时候变换addId/editId呢,例如当表当数据清空的时候更新更新addId/editId。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值