自学内容网 自学内容网

【微服务】面试 7、幂等性

在这里插入图片描述

幂等性概念及场景

  • 概念:多次调用方法或接口不改变业务状态,重复调用结果与单次调用一致。例如在京东下单,多次点击提交订单只能成功一次。
  • 场景:包括用户重复点击、网络波动导致多次请求、mq 消息重复消费、代码中设置失败或超时重试机制等情况都需保证幂等性。

不同请求类型的幂等分析

在这里插入图片描述

  • GET 请求:查询操作天然幂等,多次查询结果相同。
  • POST 请求:新增操作,多次请求结果不同,需考虑幂等解决方案。
  • PUT 请求:更新操作,若为绝对值更新则幂等,增量更新则非幂等。如“update item set money = 500 where id = 1”是幂等的,“set money = money + 500”不是幂等的。
  • DELETE 请求:一般根据唯一值删除,本身是幂等的。

幂等性解决方案

  • 数据库唯一索引:适用于解决新增操作的幂等性问题,但要求表中有相应的唯一索引。

  • token 加 redis 方案

  • 在这里插入图片描述

    • 适用范围:可解决新增和修改操作的幂等性问题,较为通用,能满足创建商品、提交订单、转账支付等多种业务场景。
    • 流程:第一次请求(如查看商品详情)时,后台生成唯一的 token(可使用 uuid),以当前登录用户为 key、token 为 value 存储到 redis,并返回给前端。第二次请求(如提交订单)时,前端携带 token 访问服务端,服务端在 redis 中查找该 token,若存在则处理业务并删除 token,若不存在则直接返回。通过这种方式保证只有一个请求能成功处理业务,实现幂等性。
  • 分布式锁方案

    • 原理:通过加锁处理来解决新增和修改操作的幂等性问题。
    • 流程:先获取分布式锁(如使用 redis 提供的分布式锁),判断是否获取成功。若失败则快速响应新增或修改失败;若成功则正常处理下单等操作,最后务必手动释放锁,并注意控制锁的力度,尽量保持最小范围,以减少对性能的影响。

在这里插入图片描述

回答面试官问题思路

首先解释幂等性概念,接着说明新增或修改操作可能引发幂等问题。对于新增数据,可根据表中是否有唯一索引选择使用数据库唯一索引,若没有则可采用分布式锁或 token 加 redis 方案,其中 token 加 redis 方案性能相对较高,并详细描述其流程。

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_44810930/article/details/145092551

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!