【笔记】幂等性

前言

在分布式系统中,这是一个普遍存在的问题,例如:同一个订单,用户手抖点了好几下确认订单,同样的参数,用户发起了多次订单,这就是幂等性问题

概念

其实幂等性是数学领域的概念,它的概念就是如果一个函数f(x)满足:f(f(x))=f(x),则函数f(x)就满足幂等性,那在计算机领域,通常用来描述一个方法、操作或者一个服务

特点

任意多次的执行和请求所产生的影响和响应都与第一次执行的相同,也就是说,同一个订单信息,我点击多次确认下单,但是最后只会下一笔,而不是多笔

好处

解决幂等性问题带来的好处就是:不用担心重复的请求操作对系统造成任何影响

举例

1、一个select和一个delete语句,这俩语句如果同时操作同一个数据,无论操作多少次,其实并不会造成什么影响

select * from user where id=1;
delete from user where id=1;

2、一个update语句,如果set amount=100,那执行100次update,amount就一直是100

update user set amount=100 where id=1;

3、一个update语句,如果是set amount=amount+1,那么执行100次,amount最终就是不断的+1,那这个就不满足幂等性要求了

update user set amount=amount+1 where id=1;

常见做法

1、借助数据库唯一索引,如果重新插入就直接报错,事务回滚即可

比如订单号,如果同一个订单号多次出现,那对创建订单来说,本来就是问题

2、前置检查判断,这其实就相当于用锁的机制来事先规避,在正式走逻辑之前,先走一下数据库来判断一下当前的参数和数据是不是已经存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值