秒杀下单(业务逻辑层)

秒杀下单和上一章的区别在于:秒杀订单需要做单独的高并发处理,同一时间,出现大量请求。并且它有单独的数量,需要单独校验。

首先定义一个名为limiter的RateLimiter(Guava限流器)令牌桶算法!!!

在业务逻辑层添加一个方法:afterPropertiesSet() 。加上@Override注解,等当前的bean加载完成后会执行这个方法

设定limter初始值为RateLimiter.create(10);//10就是令牌桶中最多存放10个令牌。每秒请求不超过10个

下面是秒杀订单的下单逻辑:

在方法上添加@Transactional注解

方法参数为Orders(订单),返回也是订单

在方法中:

首先设置阻塞,限制秒杀请求  limiter.acquire();

获取当前登录用户信息;

将用户Id设为锁,并放入ConcurrentHashMap中;

以下内容将加锁:synchronized(lock)

从订单信息中获取商品Id;

在商品表中判断是否找到商品?商品库存是否满足本次订单?

更新商品表中的库存

设置当前订单的商品名称、商品图片、商品单价、下单数量;

计算总价:商品单价*数量;

将订单状态设为“未支付”

雪花算法定义订单唯一标识(订单编号);

设置当前时间为下单时间;

设置下单用户为当前登录用户;

将订单数据添加到订单表中;

锁中逻辑结束

异步记录秒杀下单日志;

ConcurrentHashMap中的用户id移除,解锁;

返回当前订单。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值