是不是redis分布式锁还是会有一人两单问题啊。比如用户第一次抢购由于业务卡顿,导致锁过期失效了。这个用户又发了一次请求得到了锁,又执行了一次抢购。这不就两单了吗。后面讲的redisson,用了watchdog如果你阻塞太久也会释放锁,不还是会导致一人两单
全部评论
redisson作用是自动续期,可重入和可重试。一人一单和加不加锁没太大关系,把“判断库存->判断用户下单次数->扣减库存”打成一个原子操作是一人一单的关键。
锁到期需要进行补偿操作吧

不用锁也能一人一单
redis分布式锁并不能完全保证这个 如果需要高可用 强一致性 需要上zookeeper或者etcd
redis分布式锁是在redis+lua脚本原子性判断库存充足了之后异步线程创建订单时的第二个保障,虽然 Redis + Lua 保证了库存的原子性,但是如果订单创建失败(例如数据库异常),库存已经减少了,这可能会导致实际库存与数据库库存不一致。
优化:
双写一致性保障:使用 事务消息(RocketMQ/RabbitMQ 的事务特性),先预减库存,再落库成功后确认库存扣减,否则回滚。
加上事务就行了吧
这个问题有解决思路吗

虎哥说了加不加锁没有影响

问题是黑马点评没用分布式锁啊
所以需要业务保障幂等性
相关推荐
点赞 评论 收藏
分享