采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,今天面试碰到个问题,在解决超卖问题时我们使用 redis 分布式锁,但是锁上了的话一次就只能有一个线程进行购票,那这样并发度就降低了,因为购票是个比较长的流程,计算各种票的用时会比较长。这样的话就会造成并发量急速下降,我们有什么办法能解决这种问题么。
我想到的解决方案是降低锁的粒度,我们现在是锁住了 日期 + 车次;能否改为 日期 + 车次 + 座位等级,但是这样感觉粒度也很大。
这样的话,锁会有很多,而且有可能死锁,注意我们一单是可以买多个座位的,比如A买了座位1和2,B也选择座位1和2,A拿到了1的锁,B拿到了2的锁,这时AB就死锁了
请问老师,如果 对 选座后的 每个座位分配一个锁,并将锁 【按座位顺序】 放入 有序列表中 ;对 购票 流程 进行加锁;对于 memberID={A,B}的不同会员,即使抢了 同个座位集合;但是 由于是 有序列表中的锁,如果 存在 获取有序列表中的锁失败,就重新 doconfirm 整个流程;这样的话 ,不就是不会 发生死锁了?
就算不死锁,出票率也会很低,也就是很多人会抢失败,比如a买了AB, b买了BC,c买了CD,有可能a锁了A, b锁了B, c锁了C, 导致a b都出不了票
登录后可查看更多问答,登录/注册
最新版Spring3.0仿12306售票系统实战
1.2k 28
658 12
1.3k 8
729 8
768 8
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号