请稍等 ...
×

采纳答案成功!

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

超卖的问题还是没有想明白

老师,有两个小问题:
(1)这个项目解决超卖的方法是利用redis的单线程,在并发访问的时候可以串行化的执行扣减库存操作,另外通过库存售罄标志可以保证不超卖。仅仅这样就可以防止超卖了是吗?
业界解决超卖的方式主要都有哪些呢?
(2)超时释放时redis的状态:在利用mq异步扣减mysql的过程中,假设createOrder操作长时间不返回,或者程序死了,也就是程序用于不能走到回滚或者提交,则库存流水可能永远都是1,则checkLocalTranscation的操作永远都是unknow,需要有一个超时释放操作,例如当下单操作触发15分钟以上,用户还是没有收到一个明确的指示,则后台要有一个程序,将这个操作回滚释放掉,回补redis数量。是这样的思路吗?可是这个时候如何判断redis是否已经成功扣减过了?有没有可能redis没有扣减成功,并且长时间没有返回。也就是后台程序需要额外判断一下当前redis是否扣减过了是吗?不知道我理解的对不对
谢谢老师~辛苦了

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

1回答

龙虾三少 2019-09-14 23:00:05

redis单线程和超不超卖没关系 用redis是为了解决库存数据库的压力问题 第二个问题可以设置一个定时器 如果下单操作不能反回 超过15分钟释放stocklog

1 回复 有任何疑惑可以回复我~
  • 提问者 cjt5047 #1
    老师,那咱们这里是怎么解决超卖的问题啊,还是有些迷糊(?),面试的时候答不太明白
    回复 有任何疑惑可以回复我~ 2019-09-14 23:08:22
  • 提问者 cjt5047 #2
    第二个问题redis需要回补吗,是不是不用回补就可以
    回复 有任何疑惑可以回复我~ 2019-09-14 23:09:32
  • 龙虾三少 回复 提问者 cjt5047 #3
    总是先扣redis 扣成功了再下单 同时发送消息 消息有一致性保障 消费成功必定数据库扣成功了 这样redis内数据永远是少的一个 不会超卖
    回复 有任何疑惑可以回复我~ 2019-09-14 23:09:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信