当前位置: 首页 > article >正文

【微服务】面试 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 方案性能相对较高,并详细描述其流程。

在这里插入图片描述


http://www.kler.cn/a/501409.html

相关文章:

  • 阿里云直播互动Web
  • MySQL主从复制
  • virtual box虚拟机误删Python3.6后导致UBUNTU18.04开机无UI界面(进不了desktop)的解决方法
  • 树莓派-5-GPIO的应用实验之GPIO的编码方式和SDK介绍
  • 【优选算法篇】:深入浅出位运算--性能优化的利器
  • 【集成学习】Bagging、Boosting、Stacking算法详解
  • 【零基础入门Go语言】struct 和 interface:Go语言是如何实现继承的?
  • 高可用虚拟IP-keepalived
  • 51单片机——I2C-EEPROM
  • 视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp
  • MySQL innodb 引擎架构图
  • 微信小程序订阅消息提醒-云函数
  • 软件测试预备知识⑤—搭建 DNS 服务器
  • OpenCV实现基于拉普拉斯算子的浮雕特效
  • Python Selenium 库学习指南
  • 【Rust】引用与借用
  • uniapp区域滚动——上划进行分页加载数据(详细教程)
  • Python脚本自动创建GitHub标签
  • 制造企业“数字化转型”典型场景参考
  • Excel多层嵌套IF条件写法
  • Android中的蓝牙:BLE、经典蓝牙
  • Golang中遇到“note module requires Go xxx”后的解决方案,不升级Go版本!
  • 数据结构与算法之二叉树: LeetCode 572. 另一棵树的子树 (Ts版)
  • 1、什么是GO
  • IntelliJ IDEA 优化设置
  • 啥!GitHub Copilot也免费使用了