沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

    • 命名规范
    • 聊聊什么是耦合度
    • 幂等性问题分析
      • 基础介绍
      • 幂等性的重要性
      • 实现幂等性的方法
      • 应用实例
      • 注意事项
      • 结语
      • 学习参考
    • LocalDateTime和DateTime
    • 那些关于管理系统的知识
    • 唯一索引和逻辑删除冲突解决方法
    • 日志记录相关
  • UML画图

  • 权限校验

  • 设计模式

  • 系统设计
  • 设计须知
沉梦听雨
2023-12-16
目录

幂等性问题分析

# 幂等性问题分析

# 基础介绍

幂等性(Idempotence)是计算机科学中的一个重要概念,尤其在分布式系统和网络通信中非常关键。

  • 它描述了在相同条件下,不论一个操作执行多少次,其结果都与执行一次相同。
  • 这意味着,即使操作被重复请求,系统的状态或返回结果也保持不变。(多次执行同一个操作的结果与执行一次相同)

# 幂等性的重要性

  1. 数据一致性:确保系统在面对重复请求时,数据保持一致,不会因为多次操作而导致数据错误或状态不一致。
  2. 系统稳定性:通过减少因重复操作带来的潜在错误,提高系统的整体稳定性和可靠性。
  3. 简化错误处理:在幂等系统中,重复请求可以直接返回成功,无需复杂的错误处理逻辑。

# 实现幂等性的方法

  1. 唯一标识符法:通过为每个操作生成一个全局唯一的标识符(如 UUID),并在执行操作前检查该标识符是否已存在,以此确保操作不被重复执行 。(自定义注解 + AOP 切面 + redis 分布式锁)
  2. 状态检查法:在执行操作前,先检查操作对象的状态,确保只有在满足特定条件时才执行操作。
  3. Token 机制:核心思想就是,每次操作都生成一个唯一 Token 凭证,服务器通过这个唯一凭证保证同样的操作不会被执行两次。
    • 这个 Token 除了字面形式上的 唯一字符串,也可以是 多个标志的组合(比如上面提到的状态标志),甚至可以是 时间段标识 等等。
  4. 去重队列:使用消息队列时,可以设置去重机制,确保相同的消息只被消费一次。
  5. 数据库层面的约束:利用数据库的唯一约束(Unique Constraint)来防止重复数据的插入。
  6. 乐观锁:在数据库中设计订单记录时,可以添加一个 版本号 或 时间戳字段。在创建订单前,检查数据库中是否存在匹配的记录,并且 版本号 或 时间戳 与当前请求的一致,若一致则继续处理,否则认为订单已存在。
  7. 会话管理:在用户的会话(Session)中记录当前的购物车信息和下单状态。当用户点击“立即购买”时,系统检查会话中是否有未完成的下单操作。

总结:核心思路是利用 唯一标识 来进行 校验处理

# 应用实例

以电商平台下单为例,系统需要确保用户点击“立即购买”按钮时,订单不会被重复创建。

这可以通过以下步骤实现:

  1. 生成订单流水号:在用户点击购买时,系统生成一个唯一的 订单流水号。
  2. 检查订单是否存在:在创建订单前,检查数据库中是否已存在该 订单流水号 的记录。
  3. 创建订单:如果订单不存在,则创建新订单并存储到数据库;如果已存在,则返回提示信息“订单已存在”。

# 注意事项

  • 全局唯一性:确保用于幂等性检查的标识符在全局范围内是唯一的。
  • 性能考虑:幂等性检查可能会引入额外的性能开销,需要合理设计以平衡性能和稳定性。
  • 并发控制:在高并发场景下,需要采取适当的并发控制机制,以确保幂等性检查的正确性 。

# 结语

通过合理设计幂等性检查机制,可以有效地避免因重复操作带来的数据错误、资源浪费和系统崩溃等问题,从而构建更加健壮和可靠的系统。

# 学习参考

  • 保证接口幂等的八个锦囊 - 知乎 (zhihu.com) (opens new window)
  • 幂等性(防重复提交) | ruoyi-vue-pro 开发指南 (opens new window)
  • 深入理解幂等设计:确保系统稳定与数据一致性的关键 (baidu.com) (opens new window)
  • 幂等 (idempotence) 的概念-CSDN博客 (opens new window)
上次更新: 2025/3/28 17:25:55
聊聊什么是耦合度
LocalDateTime和DateTime

← 聊聊什么是耦合度 LocalDateTime和DateTime→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式