本文主要是利用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,
Cloud Alibabab笔记问世,全网详解仅此一份手慢无GitHub爆赞!阿里P8力荐的 Java源码解析及面试合集历时两个月终拿下京东offer,学习笔记全在这儿了Bigtable论文笔记阿里开发10年技术核心总结,Springboot+Redis文档,送给努力上进的程序员互联网30年变迁史与35岁被裁的程序员们为何华为的5G专利高居第一名,却还被高通要求缴纳专利费?C/C++第十一届蓝桥杯省赛B组第二场比赛西班牙人修了个文物!把全世界人民都整乐了 MySQL8.0MGR单主/多主安装与切换