【面试大全-高并发】-接口怎么做的幂等

回答思路:

是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

  • 第一种:插入之前先查询,在保存数据的接口中,我们防止产生重复的数据,一般会在 insert 前先根据 name 或 code 字段 select 一下数据,如果该数据已存在,则执行 update 操作,如果不存在,才执行 insert 操作
    缺点:该方案可能是我们平时在防止产生重复数据时,使用最多的方案。但是该方案不适用于并发场景。因为你查询的时候没有,准备插入,但是此时别的线程正好往里面插入就会有问题

  • 第二种:数据库加悲观锁,比如在支付场景中,用户 A 的账号余额有 150 元,想转出 100 元,正常情况下用户 A 的余额只剩 50 元。为了解决这个问题,可以加悲观锁,通过id将用户 A 的那行数据锁住,在同一时刻只允许一个请求获得锁,更新数据,其他的请求则等待
    缺点:需要特别注意的是:如果使用的是 MySQL 数据库,存储引擎必须用 innodb。因为它才支持事务。此外,这里 id 字段一定要是主键或者唯一索引,不然会锁住整张表。

  • 第三种:数据库加乐观锁,既然悲观锁有性能问题,为了提升接口性能,我们可以使用乐观锁。需要在表中增加一个 timestamp 或者 version 字段,这里以 version 字段为例
    在更新数据之前先查询一下数据:select id, amount, version from us

  • 136
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 77
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 77
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rundreamsFly

达者不再兼济天下,却怪穷者独善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值