幂等性是指一次和多次请求某一个资源应该具有同样的副作用,如果该资源具备幂等性,请求方只需要重新请求即可,而无需担心重复调用会产生错误。
保证幂等的方法:
1.数据库唯一索引约束。
2.MVCC方案,多版本并发控制,更新时带版本更新
例:update tableName
set
name=name,version=version+1
where
version=version
3.悲观锁,select for update,整个执行过程中锁定该数据对应的记录。PS:这种在DB读大于写的情况下尽量少用。
4.分布式锁,在业务系统插入数据或者更新数据,获取分布式锁,然后做操作,之后释放锁
5.状态机幂等,如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等
6.token机制,防止重复提交