logo头像
ICQL

microservice_幂等

幂等性

一段逻辑被执行一次和多次产生的效果是相同的,表示具有幂等性



HTTP的幂等性

常见HTTP请求动词的:

GET,幂等
POST,非幂等
PUT,幂等
DELETE,幂等



DB数据库的幂等性

select,幂等
insert,非幂等
update,幂等
delete,幂等



应用的幂等性

网络抖动、失败重试、用户重复操作等都会造成幂等性问题

1)页面操作幂等(不可靠)

(1)按钮只可操作一次

点击按钮后,按钮置灰,等待请求结果返回再恢复

(2)token机制

进入页面后向后台申请一个token,每个表单提交时都携带token

(3)post/redirect/get模式

提交表单后跳转到新的页面

2)接口幂等

(1)使用唯一索引

对于需要有幂等性要求的数据表,增加唯一索引

(2)token + redis

A向B调用申请token
B生成token,放入redis,返回token
A调用B携带token执行业务操作
B在redis中删除token
返回1删除成功,代表token存在,表示第一次操作
返回0删除失败,代表token不存在,表示重复操作
再执行业务操作

(3)状态机幂等

根据订单的状态进行保证,实际上是利用单向改变的特性
最后更新db时,利用 where 订单id + 状态 来保证

(4)乐观锁

更新单个表时,可以从接口的入口处同时携带version字段
进行乐观锁更新

(5)防重表

业务操作前先往防重表(有唯一索引)加入数据

微信打赏

赞赏是不耍流氓的鼓励