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

来源:5-21 【勤于思考,夯实学习成果】阶段思考题

cjt5047

2019-09-14

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

写回答

1回答

龙虾三少

2019-09-14

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

1
7
kevinCode
回复
龙虾三少
而且单体服务拓展成分布式服务,即使进行数据库的主从复制、主库响应写操作,也无法应对分布式事务的并发写操作,一旦业务的并发访问达到一定量级,业务执行逻辑全部打到数据库,此时数据库能同时处理这样的高并发场景嘛?这里是不是需要考虑用分布式锁去解决?
2023-12-31
共7条回复

聚焦Java性能优化 打造亿级流量秒杀系统(赠秒杀项目)

理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题

2170 学习 · 1009 问题

查看课程