比如库存10张卡,现在转账5张,因为服务器压力很大,所以我需要在MQ队列里完成扣库存的逻辑,那么我的业务设计是这样的:
① 先判断当前库存(剩余10张),再判断redis的未扣卡数量(第一次为0),库存10 - 未扣卡数量0 = 10,表示库存充足,标识转账成功,未扣卡数量变为5。
②接着发送MQ队列,在队列里面扣库存完成之后,库存剩余5,再把未扣卡数量重置为0。
③如果MQ队列里面的库存还没有扣除,库存剩余10,未扣卡数量还剩下5,那么下一次转账20张,库存10 - 未扣卡数量5,表示库存剩余5,此时不能转账成功
这个设计逻辑有个问题,就是如果MQ队列里面库存扣除成功之后,未扣卡数量却没有重置为0,就会导致数据错误。我想问问大家,有没有一些比较好的案例可以提供我思考呢?
① 先判断当前库存(剩余10张),再判断redis的未扣卡数量(第一次为0),库存10 - 未扣卡数量0 = 10,表示库存充足,标识转账成功,未扣卡数量变为5。
②接着发送MQ队列,在队列里面扣库存完成之后,库存剩余5,再把未扣卡数量重置为0。
③如果MQ队列里面的库存还没有扣除,库存剩余10,未扣卡数量还剩下5,那么下一次转账20张,库存10 - 未扣卡数量5,表示库存剩余5,此时不能转账成功
这个设计逻辑有个问题,就是如果MQ队列里面库存扣除成功之后,未扣卡数量却没有重置为0,就会导致数据错误。我想问问大家,有没有一些比较好的案例可以提供我思考呢?