幂等性解决方案

幂等性

幂等性发生场景

1 前端重复提交表单
前端用户填写完成提交,有时因网络波动没有及时对用户的提交做出响应,导致用户认为没有成功提交,然后一直点提交按钮,这时就会发生重复提交表单请求。

2 用户恶意进行刷单
例如用户投票,恶意提交订单

3 接口超时重复提交
例如调用第三方调用接口,为了防止网络波动超时,都会添加重试机制,导致一个请求提交多次。

4 消息重复消费
消息中间件出现错误,导致发生同一个消息被重复消费。

幂等性解决方案

前端拦截

用户点击完“提交”按钮后,把按钮设置为不可用或者隐藏状态,避免用户重复点击。(如果黑客绕过js,这时需要后端实现幂等性校验)

数据库

1 通过唯一索引或者唯一主键
如果重复插入会触发唯一约束而导致插入失败,就可以判定它为重复提交的请求。这个唯一字段一般是业务ID,如果是主键则可以使用分布式ID,不能是数据库自增ID。
2 通过乐观锁来实现幂等性

token机制

当用户发起请求之前,先获取后端生成的一个存储在redis中的token。当用户向后端发送请求的时候,需要携带此token,然后后端在redis中判断是否存在token,如果存在就删除token并且执行操作,如果不存在就说明当前已经有相同的请求被执行过。

分布式锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值