请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

正在回答 回答被采纳积分+3

1回答

甲蛙 2023-09-28 15:42:04

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

2 回复 有任何疑惑可以回复我~
  • wyz666 #1
    请问老师,如果 对 选座后的 每个座位分配一个锁,并将锁 【按座位顺序】 放入 有序列表中 ;对 购票 流程 进行加锁;对于 memberID={A,B}的不同会员,即使抢了 同个座位集合;但是 由于是 有序列表中的锁,如果 存在 获取有序列表中的锁失败,就重新 doconfirm 整个流程;这样的话 ,不就是不会 发生死锁了?
    回复 有任何疑惑可以回复我~ 2023-12-27 09:46:27
  • 甲蛙 回复 wyz666 #2
    就算不死锁,出票率也会很低,也就是很多人会抢失败,比如a买了AB, b买了BC,c买了CD,有可能a锁了A, b锁了B, c锁了C, 导致a b都出不了票
    回复 有任何疑惑可以回复我~ 2023-12-27 12:59:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信