如何在使用分布式锁时保证高并发

来源:16-5 使用Redis分布式锁是否能解决库存超卖?

weixin_慕娘1305685

2023-09-27

老师,今天面试碰到个问题,在解决超卖问题时我们使用 redis 分布式锁,但是锁上了的话一次就只能有一个线程进行购票,那这样并发度就降低了,因为购票是个比较长的流程,计算各种票的用时会比较长。这样的话就会造成并发量急速下降,我们有什么办法能解决这种问题么。

我想到的解决方案是降低锁的粒度,我们现在是锁住了 日期 + 车次;能否改为 日期 + 车次 + 座位等级,但是这样感觉粒度也很大。

写回答

1回答

甲蛙

2023-09-28

这样的话,锁会有很多,而且有可能死锁,注意我们一单是可以买多个座位的,比如A买了座位1和2,B也选择座位1和2,A拿到了1的锁,B拿到了2的锁,这时AB就死锁了

2
2
甲蛙
回复
wyz666
就算不死锁,出票率也会很低,也就是很多人会抢失败,比如a买了AB, b买了BC,c买了CD,有可能a锁了A, b锁了B, c锁了C, 导致a b都出不了票
2023-12-27
共2条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程