java防止并发和幂等

背景

之前工作中用了很多防并发和幂等,一般也是使用前辈们常用的手段,今天系统梳理下之前用的手段

 

防并发

1.手段一分布式锁(redis/zk)

2.请求ID作为UK,用DB兜底

3.乐观锁更新争抢

4.悲观锁等待

 

一锁二判三更新

其实不管 乐观锁,分布式锁,悲观锁 都是根据全局单点锁住了操作对象就是第一步

 

 

幂等

其任意多次执行所产生的影响均与一次执行的影响相同

幂等只是在防住并发的场景下,识别目标事件是否已完成预期,如果完成预期直接返回成功不再执行【个人理解】

 

实际场景

以前做营销发券,一定不能超发

step1:先查,如果记录不存在走step2,如果存在走step3

step2:  先落存根 根据业务设计UK 并发都会被挡住 券A  用户每天只能发一张

step3: 记录存在则验证状态,如果是已完成的(已经成功了,幂等住不处理)

如果是可执行的 通过乐观锁更新状态为执行中,持有锁后继续step4

step4: 执行发券操作,结束后 把执行中的记录改成终态

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值