幂等性是系统服务对外一种承诺,承诺只要调用接口成功,外部多次调用对系统的影响是一致的。声明为幂等的服务会认为外部调用失败是常态,并且失败之后必然会有重试。
总结有下面的实现方式
序号 | 方法 | 1 | 2 |
1 | 页面防止重复提交 | 页面防止重复提交 | |
2 | token机制 | token存Session | token存Redis |
3 | 数据库去重 | 唯一索引 | 联合唯一索引 |
4 | 悲观锁 | 数据库更新上锁 | |
5 | 乐观锁 | CAS条件更新 | CAS条件更新带版本 |
6 | 分布式锁 | Redis实现 | ZK实现 |
7 | select + insert | 数据先查询,存在再执行 | |
8 | 状态机幂等 | 状态流转有偏序关系 | |
9 | 对外提供接口的api如何保证幂等 | 来源系统+seq_no唯一 存redis,先查询,再处理 | 来源系统+seq_no唯一 存Mysql先查询,再处理 |
10 | 唯一id | 生成唯一id存Redis的集合中去重 |
考虑各个方案的优缺点-场景
待完成。。。。。。。。。
参考:
高并发下接口幂等性解决方案: https://www.cnblogs.com/linjiqin/p/9678022.html
分布式系统中接口的幂等性:https://juejin.im/post/5ceb4c4f51882572a206d174
如何保证接口的幂等性 :https://segmentfault.com/a/1190000020172463