Springboot秒杀系统(乐观锁+RateLimiter令牌+Redis缓存)

本文主要是利用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);
        //创建订单

      

你可能感兴趣的:(redis,springboot)