0


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

回答思路:

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

  • 第一种:插入之前先查询,在保存数据的接口中,我们防止产生重复的数据,一般会在 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
标签: 面试 数据库 mysql

本文转载自: https://blog.csdn.net/u010800804/article/details/121988748
版权归原作者 rundreamsFly 所有, 如有侵权,请联系我们删除。

“【面试大全-高并发】-接口怎么做的幂等”的评论:

还没有评论