如何保证接口幂等性
幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口,多次发出同一个请求,必须保证操作只执行一次,或者执行多次后结果是一样的。
为什么会产生接口幂等性问题?
1 用户重试
2 页面重复刷新,多次提交表单
3定时任务重复执行
4 消息重试
5 使用了失效或超时重试机制(Nginx重试、RPC重试或业务层重试等)
6 网络原因等
如何保证接口幂等性?
解决办法分为两个方向,一个方向是客户端防止重复调用,一个是服务端进行校验。
1按钮只可操作一次
2 token机制
3 利用数据库唯一索引机制,当数据重复时,插入数据库会抛出异常,保证不会出现脏数据
4 乐观锁机制,如果更新已有数据,可以进行加锁更新,也可以设计表结构时使用乐观锁,通过version来做乐观锁,这样既能保证执行效率,又能保证幂等
5 分布式锁
6 使用状态机
7建防重表
8 使用全局唯一号
from 蜡笔没了芯