并发抢购获取锁的问题

在一个抢购功能中,为了让商品不出现超卖现象,引入了锁,假如使用的是redis锁。
这里有个问题就是在没有获得锁的线程,后续的处理逻辑是怎样的呢?
伪代码:

if(getRedisLock()){
    // 获取锁成功扣减库存
}

如上面的伪代码,如果拿到锁然后执行扣减库存操作,但是如果没有获得锁的请求呢,逻辑是怎么处理的,如果没有获取锁直接else提示抢购失败这样的业务逻辑感觉是有问题的。在高并发下,第一个请求拿到锁,后续的很多请求可能会都获取锁失败,这样就会导致商品卖不完

阅读 1.5k
1 个回答

为啥要拿锁,Redis 你可以用 decr / incr 或者 list 。

incr 或者 decr 来加减操作,判断超量后就返回售罄。

list 在抢购开始前往里面填入抢购的条数,抢购时直接 pop ,到后面拿不到了,自然就售罄了,返回售罄

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题