本文主要是利用springboot,实现一个单机版秒杀demo,通过单机版实现,可以对基本并发秒杀的知识有一定的了解。

首先先提供秒杀业务实现类:
/** * spring 注解加在实现类 */ @Service @Transactional public class OrderServiceImpl
implements OrderService { @Autowired private StockMapper stockMapper;
@Autowired private StockOrderMapper orderMapper; @Autowired private
StringRedisTemplate redisTemplate; //方法用synchronized修饰,单机应用增加悲观锁
//注意,与@Transactional一起使用是,不会生效,如要要使用的话在调用该方法的地方使用synchronized代码块
//原因:Transactional事务是在锁之前开始的,事务范围广,当一个线程锁释放了,但是事务还没提交,当下个线程过来是,一起提交上一次事务
//一般不建议使用,线程会单个使用,降低效率,并且不要在业务代码增加synchronized @Override public int
kill(Integer id) { //加入redis缓存限时抢购,即使获得令牌如果不在活动时间内也是无法抢购 //校验redis中秒杀商品是否结束 if
(!redisTemplate.hasKey("kill"+id)) { throw new
RuntimeException("当前商品的抢购活动已经结束啦!"); } //校验库存 StockDO stockDO = checkStock(id);
//扣减库存 updateStock(stockDO); //创建订单

技术
©2019-2020 Toolsou All rights reserved,
大一上c语言学生管理系统(下)年底了,不要跳槽。字节跳动测试工程师凉经分享教你用Python画一棵圣诞树用C实现圣诞树python 使用turtle 画樱花(python3验证ok)win10系统的计算机C盘在哪,c盘users在哪(win10c盘找不到users)计算机发展史上最著名的两位鼻祖HDFS主要组件(数据块、NameNode、DataNode、secondaryNameNode)python 指定时间运行代码