本文主要是利用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 Runtime
|