- Redis預(yù)減庫(kù)存減少數(shù)據(jù)庫(kù)訪問(wèn)
- 內(nèi)存標(biāo)記減少Redis訪問(wèn)
- 請(qǐng)求先入隊(duì)緩沖琅关,異步下單,增強(qiáng)用戶體驗(yàn) RabbitMQ
- Nginx水平擴(kuò)展
- 數(shù)據(jù)庫(kù)分庫(kù)分表,用于大型數(shù)據(jù)庫(kù)的拆分 MyCat
超賣問(wèn)題
- 數(shù)據(jù)庫(kù)加唯一索引:防止用戶重復(fù)購(gòu)買
- SQL加庫(kù)存數(shù)量判斷:防止庫(kù)存變成負(fù)數(shù)
秒殺接口優(yōu)化
思路:減少數(shù)據(jù)庫(kù)訪問(wèn)
- 系統(tǒng)初始化辉川,把商品庫(kù)存數(shù)量加載到Redis
- 收到請(qǐng)求李破,Redis預(yù)減庫(kù)存,庫(kù)存不足垫蛆,直接返回禽最,否則進(jìn)入3
- 請(qǐng)求入隊(duì),立即返回排隊(duì)中 異步下單
- 請(qǐng)求出隊(duì)袱饭,服務(wù)端生成訂單寫入緩存川无,減少庫(kù)存
- 客戶端收到排隊(duì)中會(huì)輪詢緩存,是否秒殺成功虑乖,
第4懦趋、5步并發(fā)進(jìn)行
預(yù)減庫(kù)存帶來(lái)的問(wèn)題
//預(yù)減庫(kù)存
long stock = redisService.decr(GoodsKey.getMiaoShaGoodsStock, ""+goodsId);
if (stock < 0){
return Result.error(CodeMsg.MIAO_SHA_OVER);
}
當(dāng)庫(kù)存10,到11個(gè)請(qǐng)求時(shí)疹味,stock-1仅叫,OK;到第12個(gè)請(qǐng)求就應(yīng)該不需要進(jìn)redis將stock-1了
解決辦法
內(nèi)存標(biāo)記糙捺,減少redis訪問(wèn)