请稍等 ...
×

采纳答案成功!

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

redis扣減庫存成功后,發送異步消息之前,如果銷量入庫發生異常,redis不加1嗎

兩個疑問
一。
我在復盤老師的改造思路:
從redis扣減庫存和異步處理是同一個事務,是在另一個事務下面,如果扣減外的事務失敗,會出現的問題:如果這之前出現異常不會有問題,但如果扣減庫存之後的操作異常如下訂單時,這時就扣減多了,因爲redis和mq此時不被事務所控制。
改造:把從redis中扣減和發送消息分開,將發送消息放在訂單之後,如果扣減成功之後,發送消息本身發生異常,再把庫存加回來。
我的疑問是:
redis扣減庫存成功后,發送異步消息之前,如果銷量入庫發生異常,redis不加1嗎,我看代碼裏這部分沒有用try捕獲異常
如果下面圈内部分發生異常,只是回滾數據庫了,redis沒有加回來,是否應該先用try包住加回來在抛
图片描述
二。
扣減庫存這裏只涉及redis了,還有必要jia@Transactional事務注解嗎
图片描述

感謝老師答疑解惑。

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

3回答

去阿里吧 2021-04-22 14:12:58

这写些外国字看着真他妈了逼格难受

1 回复 有任何疑惑可以回复我~
慕前端8024350 2022-08-09 17:06:13

翻译了一下

两个疑问

一。

我在复盘老师的改造思路:

从redis扣减库存和异步处理是同一个事务,是在另一个事务下面,如果扣减外的事务失败,会出现的问题:如果这之前出现异常不会有问题,但如果扣减库存之后的操作异常如下订单时,这时就扣减多了,因为redis和mq此时不被事务所控制。

改造:把从redis中扣减和发送消息分开,将发送消息放在订单之后,如果扣减成功之后,发送消息本身发生异常,再把库存加回来。

我的疑问是:

redis扣减库存成功后,发送异步消息之前,如果销量入库发生异常,redis不加1吗,我看代码里这部分没有用try捕获异常

如果下面圈内部分发生异常,只是回滚数据库了,redis没有加回来,是否应该先用try包住加回来在抛


0 回复 有任何疑惑可以回复我~
龙虾三少 2020-11-09 12:23:21

redis没有办法和数据库一起保持事务性 即便加一了也有可能加失败 因此宁可少卖不要多卖

0 回复 有任何疑惑可以回复我~
  • 请问,一开始落单减库存函数是有一个@transactional标签的,这个函数内数据是redis到mq到mysql, 当这个落单减库存函数回滚的时候,mysql库存会回滚吗?redis库存能回滚吗?
    回复 有任何疑惑可以回复我~ 2021-03-27 14:46:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信