幂等总结

幂等性概念

幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的

常见技术方案
1.mysql一致性读下面的select,多次查询应该是一致的

2.删除数据,删除一次和删除多次应该是一致的

3.插入数据(可以通过唯一索引,来防止重复插入)

4.token机制,防止页面重复提交
处理流程

  1. 数据提交前要向服务的申请token,token放到redis或jvm内存,token有效时间
  2. 提交后后台校验token,同时删除token,生成新的token返回

说明:Redis是单线程的,多个命令是需要排队的,而一次删除和多次删除又是一致的,每次的token也应该是唯一的

5.加锁
(1)悲观锁

select * from table_xxx where id='xxx' for update;

id字段一定是主键或者唯一索引(行锁,innodb的锁是加在索引上的),不然有可能会锁多行,更甚者锁表

(2)乐观锁
通过版本号实现

update table_xxx set name=#{name}#, version=version+1 where version=#{version}#

(3)分布式锁
常见的分布式锁方案
①数据库唯一主键
②redis锁
③zk锁
详细见锁的分析文章

6.状态机幂等

在设计单据相关的业务,或者是任务相关的业务,肯定会涉及到状态机(状态变更图),就是业务单据上面有个状态,状态在不同的情况下会发生变更,一般情况下存在有限状态机,这时候,如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等。

你可能感兴趣的:(幂等总结)