start~

# 什么是幂等问题

什么是幂等: 同一个操作, 无论多少次, 结果都一样. 接口幂等问题如下:(接口可重复调用, 多次调用返回的接口一致.) 例如查询/删除接口是天然幂等的.

  • 一个订单创建接口,第一次调用超时了,然后调用方重试了一次
  • 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次
  • 当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次
  • 一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然后又接收到了已创建
  • 在支付完成订单之后,需要发送一条短信,当一台机器接收到短信发送的消息之后,处理较慢。消息中间件又把消息投递给另外一台机器处理

# 实现幂等的方式

# 1. 全局唯一ID

# 2. 多版本控制

# 3. 状态机控制

在分布式服务中, 要配合分布式锁使用.

# 4. 去重表

# 5. 使用ticketId(类似于去重表)

将一个步骤拆分成两个步, 先获取ticketId. 然后携带ticketId执行操作, 并记录执行操作和ticketId.

# 6. token+redis实现

调用前申请token, 调用结束删除token.

# 7. 悲观锁

mysql使用for update实现.

# 8. 乐观锁

通过version/status等条件都可以实现.

# 9. 分布式锁

# 10. 数据组合在数据库做唯一索引

修改于: 8/11/2022, 3:17:56 PM