应用背景
1、针对某些请求无论发送多少,返回结果都一致。
2、防止某些请求重复提交,导致例如扣款两次、创建重复的数据。
幂等性概念
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
实现方案
无需实现
查询:无论查询多少次返回结果都是一致。(排除数据变化情况)
删除:删除多少次都是将数据删除,最后结果都是数据删除。
实现方案
1、唯一索引
例如:用户注册逻辑,利用手机号或邮箱地址具备唯一性的数据作为唯一索引的字段。在重复插入相同用户信息时,数据库会报错防止重复插入。
要点:唯一索引或唯一组合索引来防止新增数据存在脏数据
2、token机制
1、数据提交每次都要向服务器申请一个token值(单机jvm内存,集群redis)。token一次性唯一。
2、后台接收处理时,校验token值,同时删除token值。
要点:校验token和删除toke值需要一个单元操作。jvm内存利用锁机制。redis利用删除操作即可(删除成功则有效,否则无效)
3、幂状态
在设计单据相关的业务,或者是任务相关的业务,肯定会涉及到状态机(状态变更图),就是业务单据上面有个状态,状态在不同的情况下会发生变更,一般情况下存在有限状态机,这时候,如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等。
4、Api保证幂等
如银联提供的付款接口:需要接入商户提交付款请求时附带:source来源,seq序列号 source+seq在数据库里面做唯一索引,防止多次付款,(并发时,只能处理一个请求)