幂等性

一、什么是幂等性

接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条.,这就没有保证接口的幂等性

二、哪些情况需要防止

用户多次点击按钮
用户回退页面再次提交
微服务互相调用由于网络问题,导致请求失败。feign触发重试机制。

三、什么情况下需要幂等

幂等的操作
查询一次和查询多次,在数据不变的情况下,查询结果是一样的。
更新一条数据的某个值(不包含运算操作),无论多少次最终结果都是一样的
删除一次和多次删除都是把数据删除。
新增若根据数据的唯一主键插入,即使重复插入也只会是一条数据
不幂等的操作
不带主键的新增不是幂等的
更新一条数据的值,如减库存操作不是幂等的
注:一个业务的一条sql运行两次最后结果不一样就不是幂等的(出现异常除外)

四、幂等解决方案

1.建立唯一索引,防止新增脏数据

当表存在唯一索引,并发时新增重复记录就会报错,那么这时候就查询已存在的记录并返回即可。

1.Token机制,防止页面重复提交

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.各种锁机制

数据库悲观锁

在这里插入图片描述

数据库乐观锁

在这里插入图片描述

业务层分布式锁

在这里插入图片描述

3.各种唯一约束

数据库的唯一约束

在这里插入图片描述

reids set防重

在这里插入图片描述

4.重复表

在这里插入图片描述

5.全局请求唯一id

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值