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

Java面试42-什么是幂等?如何解决幂等性问题?

所谓幂等,其实它是一个数学上的概念,在计算机编程领域中,幂等是指一个方法被多次重复执行的时候产生的影响和第一次执行的影响相同
之所以要考虑到幂等性问题,是因为在网络通信中,存在两种行为可能会导致接口被重复执行:1. 用户的重复提交或者用户的恶意攻击,导致这个请求被多次重复执行;2. 在分布式架构中,为了避免网络通信导致的数据丢失,在服务之间进行通信的时候都会设计超时重试的机制,而这种机制有可能导致服务端接口被重复调用。所以在程序设计中,对于数据变更类操作的接口,需要保证接口的幂等性。
幂等性的核心思想,其实就是保证这个接口的执行结果只影响一次,后续即便再次调用,也不能对数据产生影响,所以基于这样一个诉求,常见的解决方法有很多:

  1. 使用数据库的唯一约束实现幂等,比如对于数据插入类的场景,比如创建订单,因为订单号肯定是唯一的,所以如果是多次调用就会触发数据库的唯一约束异常,从而避免一个请求创建多个订单的问题。
  2. 使用redis里面提供的setNX指令,比如对于MQ消费的场景,为了避免MQ重复消费导致数据多次被修改的问题,可以在接收到MQ的消息时,把这个消息通过setNX写入到redis里面,一旦这个消息被消费过,就不会再次消费。
  3. 使用状态机来实现幂等,所谓的状态机是指一条数据的完整运行状态的转换流程,比如订单状态,因为它的状态只会向前变更,所以多次修改同一条数据的时候,一旦状态发生变更,那么对这条数据修改造成的影响只会发生一次。

除了这些方法以外,还可以基于token机制、去重表等方法来实现,但是不管是什么方法,无非就是两种:

  • 接口只允许调用一次,比如唯一约束、基于redis的锁机制;
  • 对数据的影响只会触发一次,比如幂等性、乐观锁。

相关文章:

  • Axure RP9教程 【数据传输】(页面值传递)| 作用域 :全局变量、局部变量
  • kafka分区策略详解
  • MCP+Blender创建电力塔
  • H.265视频编码技术:下一代高清时代的数字密码
  • NO.73十六届蓝桥杯备战|搜索算法-剪枝与优化-记忆化搜索|数的划分|小猫爬山|斐波那契数|Function|天下第一|滑雪(C++)
  • 视频分析设备平台EasyCVR携手高空抛物AI智能分析技术,打造住宅小区头顶安全智能防线
  • 高级:数据库面试题全攻略
  • whisper 语音识别
  • 游戏引擎学习第210天
  • [unity 字体] 导入中文字体、字库
  • 实操日志之Windows Server2008R2 IIS7 配置Php7.4.3
  • 【漫话机器学习系列】188.概率相关概念详解(Notions Of Probility)
  • 开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!
  • MySQL、Oracle 和 PostgreSQL 是三种主流的关系型数据库的主要原理性差异分析
  • 去中心化固定利率协议
  • 【Scrapy】Scrapy教程11——XPath详解
  • MongoDB常见面试题总结(上)
  • 软件工程第四章习题
  • JavaScript/React中,...(三个连续的点)被称为 扩展运算符(Spread Operator) 或 剩余运算符(Rest Operator)
  • 【蓝桥杯2024省B】好数 三种解法全解析 | C/C++暴力法→剪枝优化→构造法演进
  • 买了虚拟主机怎么做网站/seo关键词查询排名软件
  • 西宁市营销网站建设公司/广州百度推广客服电话多少
  • 设计类网站建设规划书/职业培训网络平台
  • 单页网站如何制作/郑州做网络优化的公司
  • 云南省住房和城乡建设厅官方网站/网站排名优化服务公司
  • 建设工程合同包括哪些合同?/seo培训费用