扣减库存的问题
来源:8-1 事务型消息(上)

夜很殇37
2019-09-18
@Override
@Transactional
public boolean decreaseStock(Integer itemId, Integer amount) throws BusinessException {
//result为redis中扣减完后的值
Long result = redisTemplate.opsForValue().increment("promo_item_stock_" + itemId, amount.intValue() * -1);
if (result >= 0) {
//更新库存成功
return true;
} else if (result == 0) {
//没有库存
redisTemplate.opsForValue().set("promo_item_stock_valid_" + itemId, "true");
return true;
} else {
//更新库存失败,回滚redis库存
increaseSales(itemId, amount);
return false;
}
}
老师,你好!
两个问题请教下
- 扣减库存这块代码,并没有加锁,在多线程环境下,扣减库存和回补库存,是会出现问题的吧??
- 扣减库存,中间加了mq,如果推出了消息,但是mq挂了,怎么解决呢
写回答
1回答
-
龙虾三少
2019-09-18
redis自身保证加减原子性 mq挂了不影响redis 仍然可以用redis操作 只是数据库同步无效了 等mq恢复会自动重发之前没有确认消费的消息
112020-01-05
相似问题