项目中实现幂等的几种方式

1.业务唯一编号:

  当系统接收到唯一的no时,先判断no对应的状态是否处理过,处理过则直接返回;防止并发的情况,需要在判断处理的地方加锁,

  多系统部署,需要加分布式锁 或者在事务中使用 select for update 获取行级锁,事务提交后会自动释放行级锁

  或者使用乐观锁 :

  update t_order set status = 1 where order_id = trade_no where status = 0;
  //上面的update操作会返回影响的行数num
  if(num==1){
  //表示更新成功提交事务;
  }else{
  //表示更新失败回滚事务;
  }

  类似于cas机制

2.数据库唯一索引

  插入数据出错,直接回滚事务,并返回信息

  

原文地址:https://www.cnblogs.com/Mr-Rocker/p/11847006.html