做后台开发,在比较严谨的功能和业务上,需要做到幂等性,实现的方式也有很多,这次记录下一二

即用户对于同一操作发起的一次请求或者多次请求的结果是一致的。
举个例子,支付场景,用户购买商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条。
如果出现这种骚操作肯定会被用户投诉啊

常用解决方案

  • 唯一索引 -- 防止新增脏数据
  • token机制 -- 防止页面重复提交
  • 悲观锁 -- 获取数据的时候加锁(锁表或锁行)
  • 乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据
  • 分布式锁 -- redis(jedis、redisson)或zookeeper实现
  • 状态机 -- 状态变更, 更新数据时判断状态

其实嘛,也很简单,就是通过不断的加参数和条件,确保这个请求是原子的,or 串行化处理,减少发生脏写 和 冲突的概率