采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
视频两分钟处介绍之前简单实现的异步扣减库存时,说createOrder中decreaseStock之外的其他方法执行失败,会产生少卖的现象。但是decreaseStock方法有@Transactional注解标注,若其他步骤失败,如生成订单号失败,decreaseStock方法不会回滚吗?redis中的库存不会因为事务回滚而再加上吗?
事务回滚是数据库的事务回滚,和redis无关,如果redis扣减了那么外部的所有情况和redis都无关,事务回滚,redis也不会自己加回来
那么意思是这种情况下,即使加了@Transactional注解。redis中扣减的,和mq中异步扣减的mysql中库存,都不会回滚再加上。
是的,包括实际项目中的设计,应该将所有除开数据库硬件异常,网络超时这种可重试成功的异常撇开后的一些异常(例如活动未开始或者已结束,商品已下架不存在这种)放在扣redis操作之前校验完毕,一旦redis扣减成功,业务意义上就是“抢到了”
老师,还有一个问题,在第八章完结版代码中的两个地方:1. MqProducer的executeLocalTransaction方法中orderService.createOrder执行失败进而执行catch代码段,2.checkLocalTransaction方法中,执行return LocalTransactionState.ROLLBACK_MESSAGE之前。都意味着下单操作失败了,是不是把redis已经扣减的库存加上比较好。
登录后可查看更多问答,登录/注册
理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题
1.8k 11
1.3k 10
1.7k 9
1.2k 9
1.1k 8