Redis解决库存超卖问题,Java高并发项目案例

// 原始的MySQL同步流程

// 判断此代金券是否加入抢购

SeckillVouchers seckillVouchers = seckillVouchersMapper.selectVoucher(voucherId);

AssertUtil.isTrue(seckillVouchers == null, “该代金券并未有抢购活动”);

// 判断是否有效

AssertUtil.isTrue(seckillVouchers.getIsValid() == 0, “该活动已结束”);

// 插入数据库

seckillVouchersMapper.save(seckillVouchers);

在订单生成时直接扣库存,这是最原始的扣库存方案,比较简单,但存在

问题

  • 可能导致很多订单把产品库存扣除而未支付,这就需要有一个后台脚本,将一段时间内没有支付的订单的库存释放,把订单取消

  • 即时扣库存,并发差

1、3步商品服务,操作商品服务的 db,2、4步订单服务,操作订单服务的 db。

避免访问不同服务的 db,原则上同一服务只能操作自身服务的 db。

MQ异步化


首先考虑只将第4步异步。

分析

2,4都是操作db,第4步不再等待,1、2、3成功后立即反馈给用户。

之后通过消息通知服务异

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值