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);
        //創建訂單

      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章