Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
244 views
in Technique[技术] by (71.8m points)

并发抢购获取锁的问题

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...