使用指南
📖 如何使用本知识库
新手入门路径
如果你是第一次接触幂等性设计,建议按以下顺序学习:
第一阶段:理论基础(1-2 天)
理解核心概念
- 阅读
01-基础概念/1-什么是幂等性.md - 理解幂等性的定义和数学表达
- 掌握幂等性与安全性的区别
- 阅读
HTTP 方法与幂等性
- 阅读
01-基础概念/2-HTTP方法与幂等性.md - 了解哪些 HTTP 方法天然幂等
- 学会如何为非幂等方法添加幂等性
- 阅读
实际应用场景
- 阅读
01-基础概念/下的其他文档 - 理解为什么需要幂等性
- 识别项目中需要幂等性的场景
- 阅读
第二阶段:实现方案(2-3 天)
Token 机制
- 阅读
02-核心实现模式/2-Token机制-预生成模式.md - 学习基于 Redis 的实现
- 学习基于 PostgreSQL 的实现
- 阅读
唯一索引
- 阅读
02-核心实现模式/4-唯一索引-数据库约束.md - 掌握数据库层面的幂等性保证
- 学会处理唯一约束冲突
- 阅读
其他实现模式
- 浏览
02-核心实现模式目录下的其他文档 - 了解乐观锁、分布式锁等方案
- 浏览
第三阶段:技术实践(3-5 天)
ASP.NET Core 实现
- 阅读
03-技术栈实现指南/1-NET-ASPNETCore中间件.md - 在你的项目中实现幂等性中间件
- 编写单元测试
- 阅读
数据库层实现
- 根据你的数据库类型选择对应的文档
- PostgreSQL: 查看相关章节
- MySQL: 查看相关章节
Redis 实现
- 学习 Lua 脚本原子操作
- 实现高性能的幂等性检查
第四阶段:场景应用(2-3 天)
支付系统
- 阅读
04-场景化解决方案/1-支付交易-防止重复扣款.md - 设计你的支付流程
- 实现幂等性控制
- 阅读
订单系统
- 阅读相关订单场景文档
- 防止重复下单
- 库存扣减幂等
其他业务场景
- 根据你的业务需求查阅对应文档
- 设计并实现幂等性方案
第五阶段:优化与运维(持续)
性能优化
- 阅读
06-常见问题与陷阱/1-性能-数据库锁竞争.md - 监控幂等性系统的性能
- 优化瓶颈
- 阅读
监控告警
- 实现指标收集
- 设置告警规则
- 定期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 Core | 03-技术栈实现指南/1-NET-ASPNETCore中间件.md |
| PostgreSQL | 03-技术栈实现指南/7-数据库-PostgreSQL唯一索引.md |
| Redis | 03-技术栈实现指南/10-Redis-Lua脚本原子性.md |
| Node.js | 03-技术栈实现指南/4-NodeJS-ExpressKoa中间件.md |
| Entity Framework | 相关数据库章节 |
按实现方案查找
| 想要的方案 | 应该阅读的文档 |
|---|---|
| Token 机制 | 02-核心实现模式/2-Token机制-预生成模式.md |
| 唯一索引 | 02-核心实现模式/4-唯一索引-数据库约束.md |
| 乐观锁 | 02-核心实现模式/6-乐观锁-版本号机制.md |
| 分布式锁 | 02-核心实现模式/8-分布式锁-Redis实现.md |
| 全局唯一 ID | 02-核心实现模式/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-性能-数据库锁竞争.mdSQL 示例
sql
-- 1. 创建唯一索引(PostgreSQL)
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md
-- 2. UPSERT 语法
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md
-- 3. 部分唯一索引
-- 位置:02-核心实现模式/4-唯一索引-数据库约束.md
-- 4. 性能监控查询
-- 位置:06-常见问题与陷阱/1-性能-数据库锁竞争.md🎯 实战演练
练习 1:为现有 API 添加幂等性
场景:你有一个订单创建 API,需要添加幂等性支持。
步骤:
- 阅读
03-技术栈实现指南/1-NET-ASPNETCore中间件.md - 在项目中添加幂等性中间件
- 修改客户端代码,添加
Idempotency-Key请求头 - 编写测试验证幂等性
预期结果:
- 相同幂等键的请求只处理一次
- 后续请求返回缓存结果
练习 2:设计支付系统的幂等性
场景:设计一个支持微信、支付宝的支付系统。
步骤:
- 阅读
04-场景化解决方案/1-支付交易-防止重复扣款.md - 设计数据库表结构
- 实现支付服务
- 处理第三方支付回调
- 实现重试机制
预期结果:
- 不会重复扣款
- 支付回调幂等处理
- 网络异常可安全重试
练习 3:优化高并发场景的性能
场景:秒杀活动导致大量并发请求,数据库锁竞争激烈。
步骤:
- 阅读
06-常见问题与陷阱/1-性能-数据库锁竞争.md - 引入 Redis 分布式锁
- 实现异步队列削峰
- 添加监控和告警
预期结果:
- 响应时间从 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. 持续学习
- 关注新技术和最佳实践的演进
- 参与开源项目,学习他人经验
- 分享你的实践经验
🤝 贡献指南
如果你发现文档中的错误或想补充内容:
- 检查是否有类似 issue
- Fork 本仓库
- 创建你的特性分支
- 提交改动
- 推送到分支
- 创建 Pull Request
📞 获取帮助
如果在使用过程中遇到问题:
- 查阅相关文档
- 搜索类似问题
- 提出 Issue,详细描述问题
- 提供代码示例和错误信息
祝你学习愉快! 🎉
如有任何问题或建议,欢迎反馈!