成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

電商并發(fā)減庫存設計,如何做到不超賣

開發(fā) 架構
高并發(fā)的秒殺活動中,通過查詢數(shù)據(jù)庫判斷是否還有庫存,然后對庫存字段進行增減,極易出現(xiàn)庫存超出或者庫存為負的情況,一般來說有3中解決辦法(數(shù)據(jù)庫表加鎖,memche緩存,redis隊列)。

前言

高并發(fā)的秒殺活動中,通過查詢數(shù)據(jù)庫判斷是否還有庫存,然后對庫存字段進行增減,極易出現(xiàn)庫存超出或者庫存為負的情況,一般來說有3中解決辦法(數(shù)據(jù)庫表加鎖,memche緩存,redis隊列);

我們這里使用redis來解決問題

1、思路:

1)觸發(fā)開始開團的同時,把庫存數(shù)量更新到id對應的隊列上去(定時更新,或者手動更新)

2)用戶請求接口,如果隊列長度>0,移除一個隊列記錄,同時對數(shù)據(jù)庫進行相應操作

3)如果隊列長度<=0,攔截用戶的訪問,返回‘無庫存’

2、重點設計在數(shù)據(jù)庫層面

2張表:

第一張:判重表(buy_record),該用戶有沒秒殺過該商品

字段: id, uid, goods_id, addtime

第二張表:商品表 goods

字段:goods_id goods_num

方案一

start transaction;
  select id from buy_record where uid=$uid and goods_id=$goods_id;
  if(結果不為空)
      拋異常,回滾。
  insert into buy_record。。。
  if(受影響行數(shù)<=0)
          拋異常,回滾。。。  
  select goods_num from goods where goods_id=$good_id;
  if(庫存<=0)
          拋異常,回滾。。。  
  update goods set goods_num=goods_num-1 where goods_id=$goods_id;
  if(受影響行數(shù)<=0)
      該方法在高并發(fā)下幾乎必然導致超賣。當庫存為1的時候剛好多個用戶同時    select goods_num from goods where goods_id=$good_id;此時庫存剛好大于0,做update操作的時候必然減到小于0.  同時上面進行是否秒殺過的判重同樣會出現(xiàn)類似問題

方案二

start transaction;
    select id from buy_record where uid=$uid and goods_id=$goods_id          for       update        ;  
if(結果不為空)
    拋異常,回滾。
insert into buy_record。。。
if(受影響行數(shù)<=0)
    拋異常,回滾。。。
    select goods_num from goods where goods_id=$good_id    for update    ;  
if(庫存<=0)
    拋異常,回滾。。。
    update goods set goods_num=goods_num-1     where goods_id=$goods_id    ;  
if(受影響行數(shù)<=0)
    拋異常,回滾。。。
該方法有效的防止了超賣,但是在每次select的時候加上了排它鎖,每次select操作都會被堵塞    ,并發(fā)性能大大降低。

方案三

對(uid,goods_id)加唯一索引!!      
  start transaction;
      insert into buy_record。。。  
  if(唯一索引報錯?)
      拋異常,已經(jīng)秒過了,回滾。。。
            update goods set goods_num=goods_num-1                         where goods_id=$goods_id          and                goods_num>0            ;      
  if(受影響行數(shù)<=0)
      拋異常,商品秒完了,回滾。。。

該方法完美的解決了超賣與select排它鎖導致的并發(fā)低的問題,并且4個sql縮減成2個sql語句。極大提升性能。

責任編輯:武曉燕 來源: 程序員編程日記
相關推薦

2022-09-19 09:49:17

MCube網(wǎng)絡引擎

2024-12-04 13:52:30

2022-09-09 08:41:43

Netty服務端驅動

2021-05-24 10:55:05

Netty單機并發(fā)

2025-03-11 08:36:52

高并發(fā)場景性能

2017-09-11 16:34:00

2021-08-02 09:01:05

MySQL 多版本并發(fā)數(shù)據(jù)庫

2011-11-09 15:49:52

API

2009-11-20 11:37:11

Oracle完全卸載

2021-06-09 18:52:05

方案設計庫存數(shù)

2010-03-30 10:44:05

Nginx啟動

2020-11-10 09:05:45

用戶畫像蘇寧

2019-08-08 10:18:15

運維架構技術

2016-01-08 10:03:07

硅谷通吃互聯(lián)網(wǎng)

2024-07-25 09:05:35

2013-04-22 10:34:46

用戶體驗設計UED認知負荷

2024-06-20 07:59:49

2023-11-30 10:13:17

TensorRT架構

2010-05-20 17:29:02

IIS安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人乱人乱一区二区三区软件 | 天天干天天操 | av黄色片在线观看 | 国产区第一页 | 羞羞视频在线观免费观看 | 久久久涩| 亚洲视频 欧美视频 | 最新国产精品精品视频 | 国产色婷婷久久99精品91 | 亚洲精品国产偷自在线观看 | 亚洲国产一区二区三区在线观看 | 日本网站免费在线观看 | 国产高清视频在线 | 麻豆av片 | 欧美精品在线免费 | 欧美精品久久久久久久久老牛影院 | 久久久久国产精品 | 亚洲精品中文字幕 | 日韩精品人成在线播放 | 亚洲国产精品精华素 | 一区二区三区精品视频 | 国产精品久久久乱弄 | 四虎最新视频 | 亚洲三区视频 | 亚洲一区二区在线视频 | 午夜影视| 无码日韩精品一区二区免费 | 亚洲第1页| 国产欧美在线 | 欧美日韩精品国产 | 一区二区三区亚洲 | 暖暖成人免费视频 | 亚洲精品日本 | 欧美精品久久 | 国产午夜久久久 | 国产精品久久久久一区二区三区 | 2019天天操 | 天天色天天射天天干 | 欧美1—12sexvideos | 国产精品亚洲精品日韩已方 | 97超碰人人 |