幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变
幂等的实现方案
系统
状态机控制幂等(旧状态无法提交)
页面
通过 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 解决重复消费问题
通过消息参数做业务去重(后台 参数校验)