本發(fā)明涉及訂單處理技術(shù),尤其涉及一種訂單處理方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,互聯(lián)網(wǎng)電商推出一種秒殺營銷模式,秒殺就是大量用戶同時搶購?fù)环N商品,在短時間內(nèi)大量用戶同時進(jìn)行購買,造成服務(wù)器的訪問量瞬間變大,很容易出現(xiàn)“超賣”現(xiàn)象。
目前有關(guān)秒殺的技術(shù)大多是采用虛擬庫存方式進(jìn)行分庫處理,具體方案是:首先,將庫存數(shù)據(jù)按照庫存分配策略劃分為一個預(yù)留倉和多個虛擬倉;系統(tǒng)接收到用戶創(chuàng)建的訂單請求后,當(dāng)訂單隊列監(jiān)控以及動態(tài)虛擬庫存分倉模塊判斷需要對虛擬倉的數(shù)量進(jìn)行調(diào)整時,調(diào)用數(shù)據(jù)庫存存儲過程功能模塊的相關(guān)存儲過程實現(xiàn)對虛擬倉數(shù)量的調(diào)整;接下來,根據(jù)訂單明細(xì)中是否包含緊缺產(chǎn)品和當(dāng)前系統(tǒng)是否啟用了虛擬庫存方案,確定當(dāng)前訂單處理是扣減預(yù)留倉庫存還是扣減虛擬倉庫存;若虛擬倉庫存足夠,則選擇扣減虛擬倉庫存,由虛擬倉選擇計數(shù)器以輪詢方式為每個訂單分配虛擬倉,訂單根據(jù)分配的虛擬倉進(jìn)行庫存扣減處理,扣減庫存成功后,將訂單創(chuàng)建成功的消息返回用戶。由上述可知,采用虛擬庫存方式進(jìn)行分庫處理的方法并不能解決在秒殺瞬間高并發(fā)的購買請求造成的“超賣”現(xiàn)象,同時,虛擬倉的庫存扣減處理需要對數(shù)據(jù)庫進(jìn)行直接操作,而頻繁對數(shù)據(jù)庫的進(jìn)行直接操作容易對數(shù)據(jù)庫的性能產(chǎn)生不良影響。
因此,如何在秒殺過程中解決高并發(fā)的購買請求造成的“超賣”現(xiàn)象,同時,在訂單處理過程中,避免頻繁對數(shù)據(jù)庫進(jìn)行直接操作是目前待解決的問題。
技術(shù)實現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明實施例期望提供一種訂單處理方法及裝置, 能夠解決在秒殺過程中高并發(fā)的購買請求導(dǎo)致的“超賣”現(xiàn)象,同時,在訂單處理過程中避免頻繁對數(shù)據(jù)庫進(jìn)行直接操作,以免對數(shù)據(jù)庫的性能產(chǎn)生不良影響。
本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
第一方面,本發(fā)明實施例提供了一種訂單處理的方法,所述方法包括:
當(dāng)接收到的購買請求滿足預(yù)設(shè)的驗證條件時,按照顯示庫存數(shù),對全部滿足所述驗證條件的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的所述購買請求;
按照扣減庫存數(shù),對第一級限制后的所述購買請求數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的所述購買請求;
按照不超過真實庫存數(shù)量的所述購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
在上述方案中,所述購買請求,包括:
所述購買請求的發(fā)送源地址標(biāo)識、所述購買請求的訪問時間和所述購買請求的用戶標(biāo)識。
在上述方案中,所述購買請求滿足預(yù)設(shè)的驗證條件,包括:
所述購買請求滿足購買條件,且所述購買請求通過權(quán)限驗證。
在上述方案中,所述購買請求滿足購買條件,包括:
當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)不超過閾值,且所述購買請求的訪問時間離搶購開始時間的間隔小于一分鐘時,所述購買請求滿足搶購條件;
或,當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)超過兩次,但所述兩次購買請求的訪問時間的間隔大于五分鐘時,所述購買請求滿足購買條件。
在上述方案中,所述購買請求通過權(quán)限驗證,包括:
當(dāng)所述購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識相匹配時,所述購買請求通過權(quán)限驗證;
當(dāng)所述購買請求中的用戶標(biāo)識與所述預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識 不匹配時,所述購買請求沒有通過權(quán)限驗證。
在上述方案中,所述按照顯示庫存數(shù),對全部滿足所述驗證條件的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的所述購買請求,包括:
將全部滿足所述驗證條件的購買請求放入第一緩存,并獲取所述第一緩存中所述購買請求數(shù)量;
當(dāng)顯示庫存數(shù)大于0時,按照所述第一緩存中所述購買請求數(shù)量,對所述顯示庫存數(shù)進(jìn)行扣減處理;
得到扣減處理成功的所述購買請求,并更新所述顯示庫存數(shù)。
在上述方案中,所述按照扣減庫存數(shù),對第一級限制后的所述購買請求數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的所述購買請求,包括:
將在第一緩存中扣減處理成功的所述購買請求放入第二緩存,并獲取所述第二緩存中所述購買請求數(shù)量;
當(dāng)扣減庫存數(shù)大于0時,按照所述第二緩存中所述購買請求數(shù)量,對所述扣減庫存數(shù)進(jìn)行扣減處理;
得到不超過真實庫存數(shù)量的所述購買請求,并更新所述扣減庫存數(shù)。
第二方面,本發(fā)明實施例提供了一種訂單處理的裝置,包括:第一限制單元、第二限制單元和更新單元;其中,
所述第一限制單元,用于當(dāng)接收到的購買請求滿足預(yù)設(shè)的驗證條件時,按照顯示庫存數(shù),對全部滿足所述驗證條件的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的所述購買請求;
所述第二限制單元,用于按照扣減庫存數(shù),對所述第一限制單元處理后的所述購買請求數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的所述購買請求;
所述更新單元,用于按照不超過真實庫存數(shù)量的所述購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
在上述方案中,所述購買請求,包括:
所述購買請求的發(fā)送源地址標(biāo)識、所述購買請求的訪問時間和所述購買請求的用戶標(biāo)識。
在上述方案中,所述購買請求滿足預(yù)設(shè)的驗證條件,包括:
所述購買請求滿足購買條件,且所述購買請求通過權(quán)限驗證。
在上述方案中,所述裝置還包括:驗證單元;其中,
驗證單元用于當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)不超過閾值,且所述購買請求的訪問時間離搶購開始時間的間隔小于一分鐘時,所述購買請求滿足搶購條件;
或,當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)超過兩次,但所述兩次購買請求的訪問時間的間隔大于五分鐘時,所述購買請求滿足購買條件。
在上述方案中,所述驗證單元,具體用于
當(dāng)所述購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識相匹配時,所述購買請求通過權(quán)限驗證;
當(dāng)所述購買請求中的用戶標(biāo)識與所述預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識不匹配時,所述購買請求沒有通過權(quán)限驗證。
在上述方案中,所述第一限制單元,具體用于
將全部滿足所述驗證條件的購買請求放入第一緩存,并獲取所述第一緩存中所述購買請求數(shù)量;
當(dāng)顯示庫存數(shù)大于0時,按照所述第一緩存中所述購買請求數(shù)量,對所述顯示庫存數(shù)進(jìn)行扣減處理;
得到扣減處理成功的所述購買請求,并更新所述顯示庫存數(shù)。
在上述方案中,所述第二限制單元,具體用于
將在第一緩存中扣減處理成功的所述購買請求放入第二緩存,并獲取所述第二緩存中所述購買請求數(shù)量;
當(dāng)扣減庫存數(shù)大于0時,按照所述第二緩存中所述購買請求數(shù)量,對所述扣減庫存數(shù)進(jìn)行扣減處理;
得到不超過真實庫存數(shù)量的所述購買請求,并更新所述扣減庫存數(shù)。
本發(fā)明實施例提供了一種訂單處理方法及裝置,通過在訂單處理過程中對高并發(fā)的購買請求數(shù)量依次進(jìn)行第一級限制和第二級限制,降低購買請求的并 發(fā)量,進(jìn)而解決高并發(fā)的購買請求導(dǎo)致的“超賣”現(xiàn)象;同時,大部分的訂單處理均在內(nèi)存中完成,這樣能夠避免頻繁對數(shù)據(jù)庫進(jìn)行直接操作,以免對數(shù)據(jù)庫的性能產(chǎn)生不良影響。
附圖說明
圖1為本發(fā)明實施例提供的一種訂單處理方法的流程示意圖;
圖2為本發(fā)明實施例提供的另一種訂單處理方法的流程示意圖;
圖3為本發(fā)明實施例提供的再一種訂單處理方法的流程示意圖;
圖4為本發(fā)明實施例提供的又一種訂單處理方法的流程示意圖;
圖5為本發(fā)明實施例提供的第五種訂單處理方法的流程示意圖;
圖6為本發(fā)明實施例提供的一種訂單處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例提供的一種訂單處理系統(tǒng)的流程示意圖;
圖8為本發(fā)明實施例提供的一種訂單處理裝置的一種結(jié)構(gòu)示意圖;
圖9為本發(fā)明實施例提供的一種訂單處理裝置的另一種結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
實施例一
參見圖1,其示出了本發(fā)明實施例提供的一種訂單處理方法,該方法可以包括:
s101:接收購買請求,確定該購買請求是否滿足預(yù)設(shè)的驗證條件;
需要說明的是,購買請求滿足預(yù)設(shè)的驗證條件包括該購買請求滿足搶購條件,且該購買請求通過權(quán)限驗證;其中,購買請求包括該購買請求的發(fā)送源地址標(biāo)識、該購買請求的訪問時間和該購買請求的用戶標(biāo)識。
其中,s101的實現(xiàn)過程具體可以包括:
s1011:接收購買請求,確定該購買請求是否滿足搶購條件;
需要說明的是,在確定購買請求是否滿足搶購條件之前,需要在前端頁面上顯示商品的顯示庫存數(shù)并確定該顯示庫存數(shù)是否大于0;其中,在前端頁面上顯示的顯示庫存數(shù)用于向用戶展示商品當(dāng)前的剩余庫存。當(dāng)顯示庫存數(shù)大于0時,購買請求進(jìn)入下一個搶購流程;當(dāng)顯示庫存數(shù)等于0時,表示商品已經(jīng)售完,終止該搶購請求的搶購流程。由于從用戶角度來看,商品的庫存數(shù)小于0不符合常識,因此,顯示庫存數(shù)必須大于或等于0。
在具體實施過程中,在確定購買請求是否滿足搶購條件之前,還需要設(shè)置一個閾值,用來限制使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù);其中,購買請求的發(fā)送源地址標(biāo)識具體可以是購買請求使用的ip地址。當(dāng)使用同一ip地址的購買請求的數(shù)量不超過該閾值,且該購買請求的訪問時間距離搶購開始時間的間隔小于一分鐘時,該搶購請求滿足搶購條件;或者,當(dāng)使用同一ip地址的購買請求的數(shù)量超過兩次,但兩次購買請求的訪問時間的間隔大于五分鐘時,該購買請求滿足搶購條件。這樣,可以防止用戶使用秒殺工具發(fā)起高并發(fā)的購買請求。
若購買請求滿足搶購條件,則該購買請求獲取系統(tǒng)發(fā)放的正確的令牌,憑借正確的令牌可以進(jìn)入下一步的搶購流程;若否,則該購買請求無法獲得系統(tǒng)發(fā)放的令牌或獲得系統(tǒng)發(fā)放的令牌為錯誤令牌,從而導(dǎo)致該購買請求無法進(jìn)入下一步的搶購流程,此時,終止該購買請求的搶購流程。
s1012:當(dāng)該購買請求滿足搶購條件時,對該購買請求進(jìn)行權(quán)限驗證。
需要說明的是,在對購買請求進(jìn)行權(quán)限驗證之前,需要預(yù)設(shè)具有參與搶購權(quán)限的用戶標(biāo)識;其中,用戶標(biāo)識具體可以用相關(guān)字節(jié)中的1或0來表示。
在具體實施過程中,通過與大數(shù)據(jù)精確營銷平臺對接來獲取購買請求的用戶標(biāo)識,比如黑名單、4g用戶、中高端用戶、每用戶平均收入(arpu,averagerevenueperuser)等。當(dāng)購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識相匹配時,該購買請求通過權(quán)限驗證,進(jìn)入下一步的搶購流程;當(dāng)購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識不匹配時,該購買請求沒有通過權(quán)限驗證,終止該購買請求的搶購流程。
s102:按照顯示庫存數(shù),對全部滿足該驗證條件的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的該購買請求;
其中,s102的實現(xiàn)過程具體可以包括:
s1021:將全部滿足該驗證條件的購買請求放入第一緩存,并獲取該第一緩存中該購買請求的數(shù)量;
在具體實施過程中,將全部滿足搶購條件且通過權(quán)限驗證的購買請求放入第一緩存區(qū)的隊列,并獲取第一緩存區(qū)的隊列中購買請求的數(shù)量;其中,第一緩存區(qū)的大小可以根據(jù)實際情況設(shè)定。當(dāng)搶購請求數(shù)量過大時,可能會超過第一緩存區(qū)的容納限度,此時,會有部分滿足搶購條件且通過權(quán)限驗證的購買請求被擠出,導(dǎo)致這部分購買請求的搶購流程被終止。
需要說明的是,為了獲取第一緩存區(qū)的隊列中購買請求數(shù)量,需要對第一緩存區(qū)的隊列中購買請求數(shù)量進(jìn)行統(tǒng)計處理。在統(tǒng)計第一緩存區(qū)的隊列中購買請求數(shù)量時,對同一個購買請求的統(tǒng)計處理只能進(jìn)行一次。因為第一緩存區(qū)的隊列中購買請求是滾動更新的,新的購買請求進(jìn)入第一緩存區(qū)的隊列的同時,已經(jīng)經(jīng)過后續(xù)全部處理后的購買請求也在退出第一緩存區(qū)的隊列,這樣在進(jìn)行統(tǒng)計處理時,有些已經(jīng)包含在上一次統(tǒng)計處理的統(tǒng)計結(jié)果中的購買請求可能還沒有來得及退出第一緩存區(qū)的隊列,導(dǎo)致在此次統(tǒng)計處理中,對已經(jīng)包含在之前的統(tǒng)計處理的統(tǒng)計結(jié)果中的購買請求進(jìn)行了二次統(tǒng)計。因此,為了保證購買請求數(shù)量的準(zhǔn)確性,對一個購買請求只能進(jìn)行一次統(tǒng)計處理。
s1022:當(dāng)顯示庫存數(shù)大于0時,按照該第一緩存中所述購買請求數(shù)量,對該顯示庫存數(shù)進(jìn)行扣減處理;
在具體實施過程中,需要先確定顯示庫存數(shù)是否大于0;若顯示庫存數(shù)大于0,則根據(jù)第一緩存中購買請求的數(shù)量,對顯示庫存數(shù)進(jìn)行扣減處理;若否,則終止該購買請求的搶購流程。
s1023:得到扣減處理成功的該購買請求,并更新該顯示庫存數(shù)。
在具體實施過程中,還需要在前端頁面上將更新后的顯示庫存數(shù)作為商品當(dāng)前的剩余庫存數(shù)展示給用戶。由于顯示庫存數(shù)必須大于或等于0,因此,即 使更新后的顯示庫存數(shù)小于0,為了顧及用戶的感受,顯示庫存數(shù)仍舊顯示為0。
需要說明的是,對第一緩存區(qū)的隊列的扣減處理采用鎖機制,在扣減處理之前,使用同步鎖進(jìn)行鎖定,在扣減處理完成并更新庫存數(shù)后,解除鎖定。這樣,能夠避免多個扣減處理并發(fā)執(zhí)行,影響購買請求數(shù)量的準(zhǔn)確性。
s103:按照扣減庫存數(shù),對第一級限制后的該購買請求的數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的該購買請求;
其中,s103的實現(xiàn)過程具體可以包括:
s1031:將在第一緩存中扣減處理成功的購買請求放入第二緩存,并獲取第二緩存中購買請求數(shù)量;
s1032:當(dāng)扣減庫存數(shù)大于0時,根據(jù)該第二緩存中購買請求數(shù)量,對該扣減庫存數(shù)進(jìn)行扣減處理;
在具體實施過程中,需要先確定扣減庫存數(shù)是否大于0;若扣減庫存數(shù)大于0,則根據(jù)所述第二緩存中所述購買請求的數(shù)量,對所述扣減庫存數(shù)進(jìn)行扣減處理;若否,則終止所述購買請求的搶購流程。
具體來說,對第二緩存區(qū)的隊列中的扣減處理采用排隊機制和鎖機制,每次的扣減處理只針對一個購買請求,在對一個購買請求進(jìn)行扣減處理時,其他購買請求在排隊等候,這樣依次對第二緩存區(qū)的隊列中的購買請求進(jìn)行扣減處理,以保證數(shù)據(jù)的安全性。同時,在每次扣減處理之前,需要使用同步鎖鎖定,本次扣減處理完成之后,再解除鎖定,這樣,能夠防止多個購買請求同時進(jìn)行扣減處理,影響購買請求數(shù)量的準(zhǔn)確性。
s1033:得到不超過真實庫存數(shù)量的該購買請求,并更新該扣減庫存數(shù)。
在具體實施過程中,扣減庫存數(shù)只用于在第二緩存中進(jìn)行扣減控制,不會顯示在前端頁面上,因此,扣減庫存數(shù)可以小于0,并且當(dāng)扣減庫存數(shù)小于0時不會影響正常的搶購流程。
s104:按照不超過真實庫存數(shù)量的該購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
其中,s104的實現(xiàn)過程具體可以包括:
s1041:將不超過真實庫存數(shù)量的購買請求放入物理庫請求隊列;
s1042:按照不超過真實庫存數(shù)量的所述購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
在具體實施過程中,mysql數(shù)據(jù)庫根據(jù)物理庫請求隊列中購買請求,采用updatea=a-1wherea>0的基本控制方式對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理,并根據(jù)mysql數(shù)據(jù)庫的處理結(jié)果判斷是否執(zhí)行成功,搶購流程結(jié)束。
需要說明的是,本發(fā)明方案中涉及三個庫存數(shù),分別是內(nèi)存中的顯示庫存數(shù)和扣減庫存數(shù),以及數(shù)據(jù)庫中的庫存數(shù),這三個庫存數(shù)的初始數(shù)值均相同,但在訂單處理過程中互不影響。在訂單處理過程中的s101~s103中只對內(nèi)存中的顯示庫存數(shù)和扣減庫存數(shù)進(jìn)行扣減,在s104中才會對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行扣減。當(dāng)對內(nèi)存中的扣減庫存數(shù)和顯示庫存數(shù)進(jìn)行初始化時,需要先將數(shù)據(jù)庫中的庫存數(shù)讀取到內(nèi)存中的扣減庫存數(shù)中,在從扣減庫存數(shù)中讀取到顯示庫存數(shù)。另外,在第一緩存區(qū)的隊列中,顯示庫存數(shù)不僅用于限制購買請求數(shù)量,還用于在前端頁面向用戶顯示商品當(dāng)前的剩余庫存,因此,顯示庫存數(shù)必須大于或等于0;而在第二緩存區(qū)的隊列中,扣減內(nèi)存數(shù)只用于限制購買請求的數(shù)量,因此,扣減庫存數(shù)可以小于0。
還需要說明的是,在訂單處理過程中,除了s104以外,其他處理過程都是在內(nèi)存中執(zhí)行的。這樣,能夠減少對數(shù)據(jù)庫直接操作的次數(shù),避免對數(shù)據(jù)庫的性能產(chǎn)生不良影響,同時,加快前端頁面顯示商品當(dāng)前的剩余庫存數(shù)的速度,提升用戶體驗。
另外,針對第一緩存區(qū)的隊列和第二緩存區(qū)的隊列,需要進(jìn)一步說明的是,由于數(shù)據(jù)庫在處理高并發(fā)購買請求時,很容易出現(xiàn)“超賣”現(xiàn)象。因此,在對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理之前,先依次使用兩個隊列來實現(xiàn)對高并發(fā)購買請求的數(shù)量限制,逐層降低購買請求的并發(fā)量;其中,兩個隊列具體可以為第一緩存區(qū)中的隊列和第二緩存中的隊列。在具體實施過程中,依次使用顯示庫存數(shù)和扣減庫存數(shù)分別對第一緩存區(qū)的隊列中的購買請求的數(shù)量和第二緩存區(qū)的隊列中的購買請求的數(shù)量進(jìn)行限制,這樣,當(dāng)搶購流程進(jìn)行到數(shù)據(jù)庫處理 庫存數(shù)這一步時,購買請求的并發(fā)量已經(jīng)降到最低。
具體來說,在搶購時的高并發(fā)場景下,由于大量購買請求瞬間涌入第一緩存區(qū)中的隊列,很容易因庫存數(shù)更新不及時而導(dǎo)致的多扣庫存數(shù)現(xiàn)象,也就是說,在高并發(fā)場景下,在第一緩存區(qū)的隊列中扣減處理成功的購買請求數(shù)量可能已經(jīng)超過了商品真實的庫存數(shù)量;接下來,將第一緩存中的隊列中扣減處理成功的購買請求放入第二緩存區(qū)中的隊列,在第二緩存區(qū)的隊列中再次對購買請求數(shù)量進(jìn)行限制;其中,第一緩存區(qū)的隊列和第二緩存區(qū)的隊列分別使用了獨立的庫存數(shù)來計算購買請求數(shù)量。這樣,即使第一緩存區(qū)的隊列沒有限制住部分購買請求,允許部分已經(jīng)超過商品真實的庫存數(shù)量的購買請求進(jìn)入了第二緩存區(qū)的隊列,但是,在第二緩存區(qū)的隊列的扣減處理中,能夠濾出該部分“多余的”購買請求,使得搶購請求的數(shù)量在數(shù)據(jù)庫更新庫存數(shù)之前,限制在商品真實的庫存數(shù)量范圍內(nèi),最大程度降低購買請求的并發(fā)量。如此,不僅解決了高并發(fā)的購買請求導(dǎo)致的“超賣”現(xiàn)象,同時提高了搶購結(jié)果的準(zhǔn)確性,為用戶提供更佳的購物體驗。
在具體實施過程中,實施例一可以由一種訂單處理系統(tǒng)來實現(xiàn):該訂單處理系統(tǒng)由前端控制層、內(nèi)存控制層和數(shù)據(jù)庫控制層這三個部分組成;其中,前端控制層包括訪問控制單元、庫存顯示單元、權(quán)限驗證單元和第一緩存隊列,內(nèi)存控制層包括第一扣減單元、第二扣減單元和第二緩存隊列,數(shù)據(jù)庫控制層包括物理庫請求隊列和數(shù)據(jù)庫扣減單元;其中,該訂單處理系統(tǒng)的結(jié)構(gòu)如圖6所示,圖中的箭頭表示訂單處理的流程順序,在具體應(yīng)用中,需要根據(jù)接收到的購買請求,循環(huán)執(zhí)行訂單處理的流程,因此圖中箭頭的指向?qū)⒃撚唵翁幚硐到y(tǒng)組合成了一個循環(huán)系統(tǒng)。
在該訂單處理系統(tǒng)中,各個單元或隊列的功能如圖7所示,包括:
s701:庫存顯示單元用于在前端頁面向用戶顯示當(dāng)前的顯示庫存數(shù);
s702:訪問控制單元用于確定接收的購買請求是否滿足搶購條件;
在具體實施過程中,當(dāng)使用同一ip地址的購買請求的數(shù)量不超過該閾值,且該購買請求的訪問時間距離搶購開始時間的間隔小于一分鐘時,該搶購請求 滿足搶購條件;或者,當(dāng)使用同一ip地址的購買請求的數(shù)量超過兩次,但兩次購買請求的訪問時間的間隔大于五分鐘時,該購買請求滿足搶購條件。
當(dāng)接收到的購買請求滿足搶購條件時,向該購買請求發(fā)放正確的令牌,該購買請求憑借正確的令牌可以進(jìn)入下一步的搶購流程。
s703:權(quán)限驗證單元用于對購買請求進(jìn)行權(quán)限驗證;
需要說明的是,當(dāng)購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識相匹配時,該購買請求通過權(quán)限驗證,進(jìn)入下一步的搶購流程。
s704:第一緩存隊列用于放置通過權(quán)限驗證的購買請求;
s705:第一扣減單元用于按照顯示庫存數(shù),對第一緩存隊列中的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的購買請求,同時,更新顯示庫存數(shù);
在具體實施過程中,需要在前端頁面上將更新后的顯示庫存數(shù)作為商品當(dāng)前的剩余庫存數(shù)展示給用戶。由于顯示庫存數(shù)必須大于或等于0,因此,即使更新后的顯示庫存數(shù)小于0,為了顧及用戶的感受,顯示庫存數(shù)仍舊顯示為0。
s706:第二緩存隊列用于放置在第一緩存區(qū)的隊列中扣減處理成功的購買請求;
s707:第二扣減單元用于按照扣減庫存數(shù),對第二緩存區(qū)的隊列中購買請求數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的購買請求;
在具體實施過程中,需要先確定扣減庫存數(shù)是否大于0;若扣減庫存數(shù)大于0,則根據(jù)所述第二緩存中所述購買請求的數(shù)量,對所述扣減庫存數(shù)進(jìn)行扣減處理;若否,說明商品已經(jīng)售完,扣減失敗,并將扣減結(jié)果返回給用戶。
具體來說,對第二緩存區(qū)的隊列中的扣減處理采用排隊機制和鎖機制,每次的扣減處理只針對一個購買請求,在對一個購買請求進(jìn)行扣減處理時,其他購買請求在排隊等候。同時,在每次扣減處理之前,需要使用同步鎖鎖定,本次扣減處理完成之后,再解除鎖定。
s708:物理庫請求隊列用于放置不超過真實庫存數(shù)量的購買請求;
s709:數(shù)據(jù)庫扣減單元用于按照不超過真實庫存數(shù)量的所述購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
在具體實施過程中,mysql數(shù)據(jù)庫根據(jù)物理庫請求隊列中購買請求,采用updatea=a-1wherea>0的基本控制方式對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理,并根據(jù)mysql數(shù)據(jù)庫的處理結(jié)果判斷是否執(zhí)行成功,搶購流程結(jié)束。
實施例二
基于上述實施例相同的技術(shù)構(gòu)思,參見圖8,其示出了本發(fā)明實施例提供的一種裝置80,該裝置80包括:第一限制單元801、第二限制單元802以及更新單元803;其中,
第一限制單元801,用于當(dāng)接收到的購買請求滿足預(yù)設(shè)的驗證條件時,按照顯示庫存數(shù),對全部滿足所述驗證條件的購買請求數(shù)量進(jìn)行第一級限制,得到第一級限制后的所述購買請求;
第二限制單元802,用于按照扣減庫存數(shù),對第一限制單元801處理后的所述購買請求數(shù)量進(jìn)行第二級限制,得到不超過真實庫存數(shù)量的所述購買請求;
更新單元803,用于按照不超過真實庫存數(shù)量的所述購買請求,對數(shù)據(jù)庫中的庫存數(shù)進(jìn)行更新處理。
在上述方案中,所述購買請求,包括:所述購買請求的發(fā)送源地址標(biāo)識、所述購買請求的訪問時間和所述購買請求的用戶標(biāo)識。
在上述方案中,所述購買請求滿足預(yù)設(shè)的驗證條件,包括:所述購買請求滿足購買條件,且所述購買請求通過權(quán)限驗證。
如圖9所示,移動終端80還包括:驗證單元804;其中,所述驗證單元804,用于當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)不超過閾值,且所述購買請求的訪問時間離搶購開始時間的間隔小于一分鐘時,所述購買請求滿足搶購條件;或,當(dāng)使用同一發(fā)送源地址標(biāo)識的購買請求的訪問次數(shù)超過兩次,但所述兩次購買請求的訪問時間的間隔大于五分鐘時,所述購買請求滿足購買條件。
在上述方案中,所述驗證單元804,用于當(dāng)所述購買請求中的用戶標(biāo)識與預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識相匹配時,所述購買請求通過權(quán)限驗證;當(dāng)所述購買請求中的用戶標(biāo)識與所述預(yù)存的具有參與搶購權(quán)限的用戶標(biāo)識不匹 配時,所述購買請求沒有通過權(quán)限驗證。
在上述方案中,所述第一限制單元801,用于將全部滿足所述驗證條件的購買請求放入第一緩存,并獲取所述第一緩存中所述購買請求數(shù)量;當(dāng)顯示庫存數(shù)大于0時,按照所述第一緩存中所述購買請求數(shù)量,對所述顯示庫存數(shù)進(jìn)行扣減處理;得到扣減處理成功的所述購買請求,并更新所述顯示庫存數(shù)。
在上述方案中,所述第二限制單元802,用于將在第一限制單元801中扣減處理成功的所述購買請求放入第二緩存,并獲取所述第二緩存中所述購買請求數(shù)量;當(dāng)扣減庫存數(shù)大于0時,按照所述第二緩存中所述購買請求數(shù)量,對所述扣減庫存數(shù)進(jìn)行扣減處理;得到不超過真實庫存數(shù)量的所述購買請求,并更新所述扣減庫存數(shù)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用硬件實施例、程序?qū)嵤├?、或結(jié)合程序和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使 得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。