幂等性 : 多次相同参数的请求,返回相同的结果或产生一样的效果。
比如系统A对系统B做一个数据插入操作,如果网络超时调用失败,A会对B重试调用,因此B系统该接口必须支持幂等,否则会出现插入重复数据。
查询和删除都是天然的幂等性操作。
幂等性通用解决方案
关键点:设计幂等性的唯一标识符
如果需要考虑并发性
加入全局分布式锁
有时也可以通过加唯一索引uk,避免出现插入重复数据(比如插入2笔相同的订单)
在数据库做兜底
在订单场景下,一般幂等性的唯一标识符为订单id
再举2个例子:
demo1 网易新闻推送
新闻的推送也要遵循幂等性
幂等性的唯一标识符是 docId + deviceId
(文章id + 设备id) ?
当然不是!!!
为啥?
因为一篇文章可能多次推送给同一个手机,
比如一个文章在直播前一天推送,直播前1小时推送,直播中推送,直播后推送重播;
因此幂等性的唯一标识符为每次推送任务而产生的taskId
demo2 抢红包
避免因网络延迟等原因造成重复请求接口
使一人抢到多次红包
说点什么
您将是第一位评论人!