什么是幂等?
数学上:f(x) = f(f(x));成立
编程领域:同一个系统,使用同一个条件,多次请求对系统资源的影响是一致的。
什么要保证幂等?
在支付的业务中几乎所有的接口都要做幂等,如果不保证可能会涉及到资损,造成严重的后果。
比如:
用户购买商品,支付扣款成功,但是返回结果的时候网络异常,用户又重复支付一次,导致扣款两次,流水也有两条。
项目中的幂等是怎么保证的?
一.增加幂等ID
1.前端请求过来会带一个requestId,作为幂等id
2.通过幂等id加分表键位for update nowait去指定库的幂等表里面查
问:
for update和for update nowait区别?
3.检查数据是否已经存在,如果存在则不继续执行,返回幂等异常。
二.唯一索引
通过订单号,用户id,用户角色id,建立唯一索引。
如果重复插入,会因为重复索引插入失败。
三.分布式锁
可以查看redis缓存中是否存在该订单号的key。