幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变
幂等的实现方案
系统
状态机控制幂等(旧状态无法提交)
页面
通过 loading、跳页 控制无法重复点击
后台
token校验
token由前端生成,存redis,校验token存在即为处理过或处理中的请求 setnx
token校验,token由服务端生成,先申请,存redis,使用时删除成功为有效请求 del
参数校验
入参存redis,重点参数一致认定为相同请求(例如个人三要素验证)
在一定时间范围内,参数一致认定为想通请求(例如创建订单)
DB
select & delete 天然幂等
insert
先查询是否存在再插入
使用联合唯一索引
使用中间去重表
update
业务场景并发低,set a = 123 认定为幂等
业务场景并发低,使用version来控制幂等
业务场景高并发
对于自减 where count - 1 > 0
对于自增
通过后端代码去重
或拆表使 count = select count(0) from table_b
由高并发引发的联想
通过MQ进行削峰,引发重复消费问题
通过db或redis,存消息id解决重复消费问题
通过消息参数做业务去重(后台 参数校验)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。