Skip to content

使用指南 ​

📖 如何使用本知识库 ​

新手入门路径 ​

如果你是第一次接触幂等性设计,建议按以下顺序学习:

第一阶段:理论基础(1-2 天) ​

  1. 理解核心概念

  2. HTTP 方法与幂等性

  3. 实际应用场景

    • 阅读 01-基础概念/ 下的其他文档
    • 理解为什么需要幂等性
    • 识别项目中需要幂等性的场景

第二阶段:实现方案(2-3 天) ​

  1. Token 机制

  2. 唯一索引

  3. 其他实现模式

    • 浏览 02-核心实现模式 目录下的其他文档
    • 了解乐观锁、分布式锁等方案

第三阶段:技术实践(3-5 天) ​

  1. ASP.NET Core 实现

  2. 数据库层实现

    • 根据你的数据库类型选择对应的文档
    • PostgreSQL: 查看相关章节
    • MySQL: 查看相关章节
  3. Redis 实现

    • 学习 Lua 脚本原子操作
    • 实现高性能的幂等性检查

第四阶段:场景应用(2-3 天) ​

  1. 支付系统

  2. 订单系统

    • 阅读相关订单场景文档
    • 防止重复下单
    • 库存扣减幂等
  3. 其他业务场景

    • 根据你的业务需求查阅对应文档
    • 设计并实现幂等性方案

第五阶段:优化与运维(持续) ​

  1. 性能优化

  2. 监控告警

    • 实现指标收集
    • 设置告警规则
    • 定期review

🔍 快速查找 ​

按问题查找 ​

我遇到的问题应该阅读的文档
用户重复提交表单04-场景化解决方案/表单提交
支付重复扣款04-场景化解决方案/1-支付交易-防止重复扣款.md
订单重复创建04-场景化解决方案/订单系统
消息队列重复消费01-基础概念/6-消息队列重复消费.md
网络重试导致数据重复01-基础概念/4-网络超时与重试机制.md
数据库锁竞争严重06-常见问题与陷阱/1-性能-数据库锁竞争.md
Token 过期如何处理06-常见问题与陷阱/5-边界-Token过期处理.md
如何实现分布式锁02-核心实现模式/8-分布式锁-Redis实现.md

按技术栈查找 ​

使用的技术应该阅读的文档
ASP.NET Core03-技术栈实现指南/1-NET-ASPNETCore中间件.md
PostgreSQL03-技术栈实现指南/7-数据库-PostgreSQL唯一索引.md
Redis03-技术栈实现指南/10-Redis-Lua脚本原子性.md
Node.js03-技术栈实现指南/4-NodeJS-ExpressKoa中间件.md
Entity Framework相关数据库章节

按实现方案查找 ​

想要的方案应该阅读的文档
Token 机制02-核心实现模式/2-Token机制-预生成模式.md
唯一索引02-核心实现模式/4-唯一索引-数据库约束.md
乐观锁02-核心实现模式/6-乐观锁-版本号机制.md
分布式锁02-核心实现模式/8-分布式锁-Redis实现.md
全局唯一 ID02-核心实现模式/10-全局ID-请求ID去重.md

💻 代码示例导航 ​

C# 示例 ​

csharp
// 1. 最简单的幂等性实现(唯一索引)
// 位置:02-核心实现模式/4-唯一索引-数据库约束.md

// 2. 基于 Redis 的 Token 机制
// 位置:02-核心实现模式/2-Token机制-预生成模式.md

// 3. ASP.NET Core 中间件
// 位置:03-技术栈实现指南/1-NET-ASPNETCore中间件.md

// 4. 支付系统完整实现
// 位置:04-场景化解决方案/1-支付交易-防止重复扣款.md

// 5. 性能优化方案
// 位置:06-常见问题与陷阱/1-性能-数据库锁竞争.md

SQL 示例 ​

sql
-- 1. 创建唯一索引(PostgreSQL)
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md

-- 2. UPSERT 语法
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md

-- 3. 部分唯一索引
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md

-- 4. 性能监控查询
-- 位置:06-常见问题与陷阱/1-性能-数据库锁竞争.md

🎯 实战演练 ​

练习 1:为现有 API 添加幂等性 ​

场景:你有一个订单创建 API,需要添加幂等性支持。

步骤:

  1. 阅读 03-技术栈实现指南/1-NET-ASPNETCore中间件.md
  2. 在项目中添加幂等性中间件
  3. 修改客户端代码,添加 Idempotency-Key 请求头
  4. 编写测试验证幂等性

预期结果:

  • 相同幂等键的请求只处理一次
  • 后续请求返回缓存结果

练习 2:设计支付系统的幂等性 ​

场景:设计一个支持微信、支付宝的支付系统。

步骤:

  1. 阅读 04-场景化解决方案/1-支付交易-防止重复扣款.md
  2. 设计数据库表结构
  3. 实现支付服务
  4. 处理第三方支付回调
  5. 实现重试机制

预期结果:

  • 不会重复扣款
  • 支付回调幂等处理
  • 网络异常可安全重试

练习 3:优化高并发场景的性能 ​

场景:秒杀活动导致大量并发请求,数据库锁竞争激烈。

步骤:

  1. 阅读 06-常见问题与陷阱/1-性能-数据库锁竞争.md
  2. 引入 Redis 分布式锁
  3. 实现异步队列削峰
  4. 添加监控和告警

预期结果:

  • 响应时间从 200ms 降低到 10ms
  • 支持 10000+ QPS
  • 无死锁和超时

📊 学习检查清单 ​

完成以下任务来检验你的学习效果:

基础理解 ​

  • [ ] 能解释什么是幂等性
  • [ ] 能列出所有幂等的 HTTP 方法
  • [ ] 能说明安全性和幂等性的区别
  • [ ] 能识别项目中需要幂等性的场景

实现能力 ​

  • [ ] 能实现基于 Token 的幂等性
  • [ ] 能实现基于唯一索引的幂等性
  • [ ] 能实现基于分布式锁的幂等性
  • [ ] 能为 POST 请求添加幂等性支持

技术应用 ​

  • [ ] 能在 ASP.NET Core 中实现幂等中间件
  • [ ] 能在 PostgreSQL 中创建唯一索引
  • [ ] 能使用 Redis 实现分布式锁
  • [ ] 能编写 Lua 脚本保证原子性

场景解决 ​

  • [ ] 能设计支付系统的幂等性方案
  • [ ] 能防止订单重复创建
  • [ ] 能处理消息队列重复消费
  • [ ] 能实现表单提交防重

优化运维 ​

  • [ ] 能监控幂等性系统的性能
  • [ ] 能诊断数据库锁竞争问题
  • [ ] 能设置合理的告警规则
  • [ ] 能进行压力测试

🔗 相关资源 ​

官方文档 ​

推荐书籍 ​

  • 《企业集成模式》- Gregor Hohpe
  • 《微服务架构设计模式》- Chris Richardson
  • 《高性能MySQL》- Baron Schwartz

在线课程 ​

  • Pluralsight: Design Patterns in .NET
  • Udemy: Microservices Architecture

💡 学习建议 ​

1. 理论结合实践 ​

  • 每学完一个概念,立即动手实现
  • 在你的实际项目中应用所学知识
  • 从简单的场景开始,逐步复杂化

2. 深度优先,广度随后 ​

  • 先深入掌握一种实现方案
  • 再横向对比其他方案
  • 理解各方案的适用场景

3. 重视最佳实践 ​

  • 遵循业界成熟的设计模式
  • 避免常见的陷阱和错误
  • 关注性能和安全

4. 持续学习 ​

  • 关注新技术和最佳实践的演进
  • 参与开源项目,学习他人经验
  • 分享你的实践经验

🤝 贡献指南 ​

如果你发现文档中的错误或想补充内容:

  1. 检查是否有类似 issue
  2. Fork 本仓库
  3. 创建你的特性分支
  4. 提交改动
  5. 推送到分支
  6. 创建 Pull Request

📞 获取帮助 ​

如果在使用过程中遇到问题:

  1. 查阅相关文档
  2. 搜索类似问题
  3. 提出 Issue,详细描述问题
  4. 提供代码示例和错误信息

祝你学习愉快! 🎉

如有任何问题或建议,欢迎反馈!

Released under the MIT License.