本發(fā)明實施例涉及網(wǎng)絡應用技術(shù)領(lǐng)域,尤其涉及一種商品庫存信息的處理方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)金融的不斷發(fā)展,越來越多的金融電商平臺融入人們的生活。在金融電商平臺中,商品無疑是相當關(guān)鍵的一個組件,而商品庫存信息則是管理商品最為重要的方面,因此對商品庫存信息進行處理的低延遲性和高可用性顯得尤為重要。
目前的金融電商系統(tǒng)中,商品庫存信息和商品訂單信息等所有信息均存放在金融電商系統(tǒng)對應的服務器的數(shù)據(jù)庫中,在對商品庫存信息的處理過程中,特別是高并發(fā)情況下,通常利用數(shù)據(jù)庫行級鎖對商品庫存信息,以將某一待處理商品庫存信息進行加鎖處理,在多個線程對該待處理商品庫存信息進行操作情況下,只有其中一個線程對該待處理商品庫存信息進行操作完成之后,其它線程才有權(quán)限對該待處理商品庫存信息繼續(xù)操作,從而保證商品庫存信息和訂單信息一致性、商品庫存信息的準確性、訂單狀態(tài)的準確性等。
但是在高并發(fā)的情況下,由于商品庫存信息和商品訂單信息等所有信息均存放在金融電商系統(tǒng)對應的服務器的數(shù)據(jù)庫中,根據(jù)該服務的數(shù)據(jù)庫的結(jié)構(gòu),利用數(shù)據(jù)庫行級鎖,對商品庫存信息進行處理時,占用該服務器的數(shù)據(jù)庫資源,易出現(xiàn)數(shù)據(jù)嚴重阻塞現(xiàn)象,使商品庫存信息并發(fā)處理的能力大幅降低,導致對商品庫存信息處理的延遲性較高、可用性降低。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種商品庫存信息的處理方法及系統(tǒng),實現(xiàn)了商品庫存信息與商品庫存信息以外其他信息分別由不同的服務器存儲,在對商品庫存信息進行處理時,減少了數(shù)據(jù)傳輸阻塞現(xiàn)象,提高了商品庫存信息并發(fā)處理能力,在高并發(fā)情況下,能夠降低商品庫存信息處理的延遲性、提高商品庫存信息處理的可用性。
本發(fā)明提供一種商品庫存信息的處理方法,所述商品庫存信息存儲在緩存服務器中,所述商品庫存信息以外的信息存儲在主服務器中;
所述主服務器根據(jù)待處理商品庫存信息的標識,確定所述緩存服務器內(nèi)所述標識對應的待處理商品庫存信息的存儲地址;
所述主服務器根據(jù)所述緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),對所述待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;
所述主服務器根據(jù)所述處理結(jié)果,對所述待處理商品庫存信息進行處理。
本發(fā)明還提供一種商品庫存信息的處理系統(tǒng),包括緩存服務器和主服務器;
所述商品庫存信息存儲在緩存服務器中,所述商品庫存信息以外的信息存儲在所述主服務器中,所述主服務器包括:
確定模塊,用于根據(jù)待處理商品庫存信息的標識,確定所述緩存服務器內(nèi)所述標識對應的待處理商品庫存信息的存儲地址;加鎖模塊,用于根據(jù)所述緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),對所述標識對應的待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;
處理模塊,用于根據(jù)所述處理結(jié)果,對所述待處理商品庫存信息進行處理。
本發(fā)明的商品庫存信息的處理方法及系統(tǒng),預先將商品庫存信息存儲在緩存服務器中,商品庫存信息以外的信息存儲在主服務器中,通過主服務器根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址之后,由主服務器根據(jù)緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),對該標識對應的待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;并根據(jù)得到的處理結(jié)果,對待處理商品庫存信息進行處理,實現(xiàn)了商品庫存信息與商品庫存信息以外其他信息分別由不同的服務器完成存儲,減少了數(shù)據(jù)傳輸阻塞現(xiàn)象,提高了商品庫存信息并發(fā)處理能力。采用本實施例的技術(shù)方案,在高并發(fā)情況下,能夠降低商品庫存信息處理的延遲性、提高商品庫存信息處理的可用性。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當限定。在附圖中:
圖1為本發(fā)明的商品庫存信息的處理方法實施例一的流程圖;
圖2為本發(fā)明的商品庫存信息的處理方法實施例二的流程圖;
圖3為圖2所示實施例中Redis集群結(jié)構(gòu)的示意圖;
圖4為本發(fā)明的商品庫存信息的處理方法實施例三的流程圖;
圖5為本發(fā)明的商品庫存信息的處理系統(tǒng)的實施例一的結(jié)構(gòu)示意圖;
圖6為本發(fā)明的商品庫存信息的處理系統(tǒng)的實施例二的結(jié)構(gòu)示意圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細說明本申請各實施例提供的技術(shù)方案。
實施例一
圖1為本發(fā)明的商品庫存信息的處理方法實施例一的流程圖,如圖1所示,本實施例的商品庫存信息的處理方法,具體可以包括如下步驟:
100、主服務器根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址。
通常情況下,商品庫存信息和商品訂單信息等所有信息均存放在金融電商系統(tǒng)對應的同一個服務器的數(shù)據(jù)庫中,例如,當生成商品訂單信息之后,會根據(jù)該服務器的數(shù)據(jù)庫的結(jié)構(gòu),利用數(shù)據(jù)庫行級鎖對商品庫存信息進行處理,以保證商品庫存信息和訂單信息一致性、商品庫存信息的準確性、訂單狀態(tài)的準確性等。在高并發(fā)情況下,商品的可售數(shù)量通常是有限的,由于數(shù)據(jù)傳輸阻塞等原因,利用數(shù)據(jù)庫行級鎖對商品庫存信息進行處理時,對商品庫存信息扣減延遲較高,會造成商品可售數(shù)量小于訂單數(shù)量等情況,降低了其可用性。
因此,本實施例的商品庫存信息的處理方法中,可以將商品庫存信息和除了商品庫存信息以外的其它信息分開存儲,其中商品庫存信息存儲在緩存服務器中,除了商品庫存信息以外的其它信息仍存放在金融電商系統(tǒng)對應的服務器中,本實施例將金融電商系統(tǒng)對應的服務器定義為主服務器。
在對商品庫存信息進行處理時,為了減少數(shù)據(jù)傳輸阻塞,及時有效的獲取到商品庫存信息,本發(fā)明實施例中主服務的數(shù)據(jù)庫結(jié)構(gòu)與緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)不同。例如,為了降低單個對象的重要度,提高系統(tǒng)的性能,本發(fā)明實施例中,緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)可以采用分布式的數(shù)據(jù)結(jié)構(gòu),將商品庫存信息存儲在緩存服務器時,可以保障當一個節(jié)點出現(xiàn)故障后,其它節(jié)點仍然可以被利用,從而保障緩存服務器內(nèi)的商品庫存信息及時有效的被獲取。
這樣主服務器對商品進行查詢、下單、生成訂單等操作生成訂單后,主服務器根據(jù)緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),在商品庫存信息中對訂單中的商品數(shù)量進行扣減的操作、或者查看商品庫存信息中某商品的可售數(shù)量,增添該商品的可售數(shù)量或者修改該商品庫存信息等操作。
在一個具體實現(xiàn)過程中,緩存服務器中會存在多種商品庫存信息,因此為了確定某一商品的庫存信息,本實施例可以將不同商品進行多個編號,并根據(jù)其中的多個編號形成各商品庫存信息的標識。具體地,各商品庫存信息的標識至少包括商品的編號(prod_id)、商品的庫量單位編號(prod_sku_id)以及商品的邏輯倉編號(logst_id)。其中,商品的編號是為了便于識別輸入儲存和處理,用來表示商品一定信息的一個或一組有規(guī)律排列的符號;商品的庫量單位編號,即庫存進出計量的基本單元,可以是以件,盒,托盤等為單位,現(xiàn)在已經(jīng)被引申為產(chǎn)品統(tǒng)一編號的簡稱,每種產(chǎn)品均對應有唯一的sku號,商品的邏輯倉編號(logst_id)通常為商品對應的存放信息,例如,存放倉庫的地理信息等,如在北京和天津各有一個倉庫存放某一商品,商家可以根據(jù)用戶的訂單信息和商品的邏輯倉編號,選擇離用戶地址最近的倉庫調(diào)取商品,以最快的進行配送。
通常情況下,用戶通過客戶端對待處理商品進行下單或者需要查詢、修改待處理商品的庫存信息等時,主服務器會生成該產(chǎn)品對應的待處理商品庫存信息的標識,對待處理商品庫存信息進行處理時,主服務器會根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址。
101、主服務器對該標識對應的待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果。
102、主服務器根據(jù)得到的處理結(jié)果,對待處理商品庫存信息進行處理。
為了保證商品庫存信息和訂單信息一致性、商品庫存信息的準確性、訂單狀態(tài)的準確性等,在對待處理商品庫存信息進行處理過程中,需避免多個線程同時對待處理商品庫存信息進行處理,因此,在生成待處理商品庫存信息的標識后,需確定待處理商品庫存信息的存儲地址,并對待處理商品庫存信息的存儲地址進行加鎖處理,并得到處理結(jié)果之后,根據(jù)該處理結(jié)果對待處理商品庫存信息進行處理。
本發(fā)明實施例中,根據(jù)緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)可以實現(xiàn)對待處理商品庫存信息的存儲地址進行分布式加鎖處理,以降低單個對象的重要性,提升整個系統(tǒng)的性能。
例如,在多線程對待處理商品進行下單操作時,會根據(jù)相關(guān)原則,獲取其中一個線程發(fā)送過來待處理商品庫存信息的標識,并確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址,根據(jù)緩存服務器中的數(shù)據(jù)庫結(jié)構(gòu)對該存儲地址進行分布式加鎖處理,若得到的處理結(jié)果為主服務器確定對存儲地址加鎖成功,該線程則能夠根據(jù)該標識,對待處理商品庫存信息進行修改處理,如扣減訂單中商品對應的數(shù)量。在此過程中,若再獲取到其它線程發(fā)送過來待處理商品庫存信息的標識后,得到的處理結(jié)果為緩存服務器確定對所述存儲地址加鎖失敗,其它線程無法對待處理商品庫存信息進行處理,維持待處理商品庫存信息不變。
本實施例的商品庫存信息的處理方法中,緩存服務器需要支持高并發(fā)情況下的讀寫速度,并且可以根據(jù)緩存服務器內(nèi)的數(shù)據(jù)庫結(jié)構(gòu),實現(xiàn)高并發(fā)情況下對待處理商品庫存信息的分布式加鎖,以保證在對待處理商品庫存信息的處理的及時性、準確性、便捷性等。
通常情況下,Redis集群的讀操作可達10萬筆/秒,寫操作可達2萬筆/秒,因此本實施例以Redis集群作為緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)為例,對本發(fā)明的技術(shù)方案進行描述。但本方案并不限制其它支持高并發(fā)情況下的讀寫速度的緩存服務器。
本實施例中,可以將Redis看作為一個開源的使用ANSIC語言編寫、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日執(zhí)行、鍵-值(Key-Value)數(shù)據(jù)庫,并提供多種語言的應用程序接口(Application Program Interface,API)。
本實施例的商品庫存信息的處理方法依托于Redis集群作為緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),利用Redis集群中的鍵-值類型的數(shù)據(jù)結(jié)構(gòu),對Redis集群模擬加鎖機制,實現(xiàn)對待處理商品庫存信息的存儲地址進行分布式加鎖處理,并為了方便記錄與操作商品庫存信息,可以在鍵-值類型的數(shù)據(jù)結(jié)構(gòu)的基礎上,融入但不限制于哈希表(HashMap)類型的數(shù)據(jù)結(jié)構(gòu),從而方便快捷的對待處理商品庫存信息進行處理。例如,在主服務對待處理商品庫存信息的存儲地址進行加鎖成功后,即可對待處理商品庫存信息中的商品數(shù)量進行增加或刪減、對待處理商品庫存信息進行修改、查詢等處理。
本實施例的商品庫存信息的處理方法,預先將商品庫存信息存儲在緩存服務器中,商品庫存信息以外的信息存儲在主服務器中,通過主服務器根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址之后,由主服務器根據(jù)緩存服務器的數(shù)據(jù)庫結(jié)構(gòu),對該標識對應的待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;并根據(jù)得到的處理結(jié)果,對待處理商品庫存信息進行處理,實現(xiàn)了商品庫存信息與商品庫存信息以外其他信息分別由不同的服務器存儲,減少了數(shù)據(jù)傳輸阻塞現(xiàn)象,提高了商品庫存信息并發(fā)處理能力。采用本實施例的技術(shù)方案,在高并發(fā)情況下,能夠降低商品庫存信息處理的延遲性、提高商品庫存信息處理的可用性。
實施例二
圖2為本發(fā)明的商品庫存信息的處理方法實施例二的流程圖,本實施例的商品庫存信息的處理方法在圖1所示實施例的基礎上,進一步更加詳細地對本發(fā)明的技術(shù)方案進行描述。
如圖2所示,本實施例的商品庫存信息的處理方法,具體可以包括如下步驟:
200、主服務器檢測商品庫存信息的存儲位置;若檢測到商品庫存信息存儲在緩存服務器中,執(zhí)行步驟201;否則,若檢測到商品庫存信息存儲在主服務器中,執(zhí)行步驟209。
通常情況下,商品庫存信息包括商品實際庫存信息、商品可售庫存信息或者商品凍結(jié)庫存信息等,緩存服務器可能存在出現(xiàn)故障的狀況,為了提高對商品庫存信息處理的容災能力,本實施例的商品庫存信息的處理方法中,還將商品庫存信息存儲在主服務器中,當緩存服務器未出現(xiàn)故障的狀況下,可以檢測到商品庫存信息存儲在緩存服務器中,此時可以直接從緩存服務器獲取到商品庫存信息,并執(zhí)行步驟201;當緩存服務器出現(xiàn)故障的狀況下,會檢測到商品庫存信息存儲在主服務器中,此時可以從主服務器中獲取到商品庫存信息,并執(zhí)行步驟209。
201、主服務器根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)該標識對應的待處理商品庫存信息的存儲地址。
本實施例的實現(xiàn)原理與圖1所示實施例中步驟100的實現(xiàn)原理相同,詳細請參考上述相關(guān)記載,在此不再贅述。
202、主服務器檢測該標識對應的待處理商品庫存信息的存儲地址是否能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中;若檢測到存儲地址能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,執(zhí)行步驟203,否則,若檢測到存儲地址不能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,執(zhí)行步驟206。
本實施例以緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)為Redis集群為例對本發(fā)明的技術(shù)方案進行描述。Redis集群的可用性是本實施例對商品庫存信息的處理的前提,圖3為圖2所示實施例中Redis集群結(jié)構(gòu)的示意圖,如圖3所示,Redis集群可以包括4個主節(jié)點(Master),每個主節(jié)點配有兩個從節(jié)點(Slave),Redis集群若正常工作,需要保證所有的主節(jié)點同時存活,因此,當某個主節(jié)點發(fā)生異常后,從節(jié)點可以轉(zhuǎn)換為主節(jié)點,從而保證Redis集群正常工作。本實施例對其它實現(xiàn)Redis集群正常工作的結(jié)構(gòu)不做具體限制。
在主服務器生成待處理商品庫存信息的標識后,可以根據(jù)該標識確定緩存服務器內(nèi)待處理商品庫存信息的存儲地址,本實施例中將待處理商品庫存信息的存儲地址定義為stcok:[prod_id]:[prod_sku_id]:[logst_id]。
本實施例的商品庫存信息的處理方法,可以利用Redis集群中的鍵-值類型的數(shù)據(jù)結(jié)構(gòu)以及Redis集群相關(guān)命令語句實現(xiàn)對待處理商品庫存信息的存儲地址進行加鎖處理。具體地,定義lock:stcok:[prod_id]:[prod_sku_id]:[logst_id]作為對待處理商品庫存信息的存儲地址進行加鎖處理的任務名,并將該任務名作為鍵存儲至Redis集群中。
表1為Redis集群中的數(shù)據(jù)結(jié)構(gòu),如表1所示,Redis-key即為Redis集群中的鍵,Redis-value即為Redis集群中的值,Map-field和Map-value形成一個HashMap結(jié)構(gòu)的數(shù)據(jù)庫,并與Redis-value對應作為Redis-key對應的值。其中,Map-field為HashMap中的鍵,Map-value為HashMap中的值,本實施例中PROD_STORAGE為商品的可售庫存信息,PROD_FREEZE_STORAGE為商品凍結(jié)庫存信息,OVERBOOK_COUNT為商品的超售數(shù)量。本實施例中,Map-value對應的信息還可以根據(jù)實際情況增加相應內(nèi)容,本實施例并不限制與表1所示的數(shù)據(jù)結(jié)構(gòu)。
表1
本實施例基于圖3所示的Redis集群結(jié)構(gòu)、表1所示的數(shù)據(jù)結(jié)構(gòu)以及待處理商品的標識可以將Redis集群與主服務器的數(shù)據(jù)庫結(jié)構(gòu)實現(xiàn)關(guān)聯(lián),通過對Redis-key進行分布式加鎖處理,實現(xiàn)對待處理商品庫存信息的存儲地址進行加鎖處理,具體地,當待處理商品庫存信息的存儲地址進行加鎖處理時,會通過任務名的方式向Redis集群發(fā)送請求時,通過setnx()命令檢測該任務名是否能插入Redis集群中,若能插入setnx()會返回邏輯值“1”,否則會返回邏輯值“0”。當setnx()返回的是邏輯值“1”,則說明待處理商品庫存信息的存儲地址能夠插入Redis集群中,執(zhí)行步驟203,否則當setnx()會返回邏輯值“0”,說明待處理商品庫存信息的存儲地址不能夠插入Redis集群中,執(zhí)行步驟206。
203、主服務器確定對存儲地址加鎖成功。
當某一線程對待處理商品庫存信息的存儲地址加鎖成功之后,需要通過終止命令(expire)對加鎖后的存儲地址設置一個過期時間,并在該過期時間內(nèi),根據(jù)待處理商品庫存信息的標識,對待處理商品庫存信息進行修改處理,例如,本實施例中,待處理商品庫存信息的標識對應的存儲地址即為Redis-key,待處理商品庫存信息即為Redis-value,可以獲取Redis-key對應的Redis-value,以根據(jù)待處理商品庫存信息的商品的編號、商品的庫量單位編號以及商品的邏輯倉編號,對Redis-value內(nèi)HashMap的數(shù)據(jù)進行修改處理,保證HashMap的數(shù)據(jù)的準確性。
當加鎖后的存儲地址的加鎖時間達到設定的過期時間后,即使當前線程對待處理商品庫存信息的操作沒有執(zhí)行完成,Redis集群將加鎖后的存儲地址刪除掉,以避免當前線程長期占用商品庫存信息對應的鎖
204、主服務器檢測是否捕捉到在對待處理商品庫存信息進行處理過程中的異常操作;若未捕捉到異常操作,執(zhí)行步驟205;否則,若捕捉到異常操作,結(jié)束該流程。
當確定對存儲地址加鎖成功后,該線程可以對待處理商品庫存信息進行處理中,可能出現(xiàn)如修改待處理商品庫存信息失敗、增加待處理商品的庫存數(shù)量失敗、扣減待處理商品的庫存數(shù)量失敗等操作,因此,主服務器會通過異常捕獲(try_catch)指令,對在處理待處理商品庫存信息過程中進行異常操作捕捉。若未捕捉到異常操作,執(zhí)行步驟205;否則若捕捉到異常操作,結(jié)束該流程。
205、主服務器對加鎖后的存儲地址進行解鎖處理。
若未捕捉到異常操作,最終利用刪除(del)命令刪除加鎖后的存儲地址,以使其它線程再對待處理商品庫存信息請求處理時,能夠請求成功,并實現(xiàn)處理。
206、主服務器確定對存儲地址加鎖失敗。
確定對存儲地址加鎖失敗后,則說明該線程對待處理商品庫存信息沒有處理權(quán)限,無法對待處理商品庫存信息進行處理,維持所述待處理商品庫存信息不變即可。
207、主服務器檢測加鎖后的存儲地址是否為死鎖狀態(tài);若檢測到加鎖后的存儲地址為死鎖狀態(tài),執(zhí)行步驟208;若檢測到加鎖后的存儲地址不為死鎖狀態(tài),執(zhí)行步驟201。
若確定對存儲地址加鎖失敗,可能由于死鎖造成的或者該存儲地址已被其它線程加鎖造成的等。若是死鎖造成對存儲地址加鎖失敗,會使該對存儲地址一直被加鎖,其它線程則將一直無法對待處理商品庫存信息進行處理,因此需要確定造成對待處理商品庫存信息的存儲地址加鎖失敗的原因。
具體地,可以根據(jù)獲取存儲地址對應的值判斷存儲地址是否為死鎖狀態(tài),例如,為了避免造成死鎖,加鎖后的存儲地址都會設置一個過期時間,因此,可以通過獲取該過期時間,并將獲取結(jié)果轉(zhuǎn)換為存儲地址對應的值。若檢測到存儲地址對應的值與第一指定值匹配,確定存儲地址為死鎖狀態(tài)。例如,本實施例預先設置一個第一指定值,第一指定值表示存儲地址為死鎖狀態(tài)。若存儲地址被加鎖,但沒有設置過期時間,則無法獲取到該存儲地址的過期時間,返回的數(shù)值與第一指定值相同,說明加鎖失敗的原因為死鎖造成的,需要執(zhí)行步驟208。本實施例預先設置一個第一指定值可以為但不限制于-1。
否則,若未獲取到存儲地址對應的值、若檢測到存儲地址對應的值與第二指定值匹配或者若檢測到存儲地址對應的值與第三指定值匹配,確定加鎖后的存儲地址不為死鎖狀態(tài),根據(jù)實際情況做具體處理。
例如,若Redis集群存在異常狀況,此時可能由于機房停電或者網(wǎng)絡出現(xiàn)故障等原因造成的Redis集群宕機導致的,此時不能獲取到存儲地址對應的值,需要相關(guān)人員去檢查機房或者網(wǎng)路是否正常,當正常后執(zhí)行步驟201。
本實施例預先設置一個第二指定值,第二指定值表示任務名對應的存儲地址與訪問的存儲地址不相同。若Redis集群中該存儲地址未被加鎖,此時也無對應的過期時間,由于一些異常情況,導致任務名對應的存儲地址與訪問地址不同,此時是不能對任務名對應的存儲地址進行加鎖處理的,返回的數(shù)值與第二指定值相同,鎖失敗的原因為任務名對應的存儲地址與訪問的存儲地址不相同,無需處理,執(zhí)行步驟201。其中第二指定值可以為-2。
本實施例預先設置一個第三指定值,第三指定值表示該存儲地址被加鎖,且設置了過期時間。若返回的數(shù)值與第三指定值相匹配,加鎖失敗的原因為被其它線程占用,無需處理,執(zhí)行步驟201。其中第三指定值為0,返回的數(shù)值只要為大于0的正整數(shù)即表示返回的數(shù)值與第三指定值相匹配。
208、主服務器對加鎖后的存儲地址進行死鎖處理。
利用del命令將該加鎖后的存儲地址刪除。
209、根據(jù)主服務器的數(shù)據(jù)庫結(jié)構(gòu),完成對商品庫存信息的處理。
本實施例中由于緩存服務器可能出現(xiàn)故障的狀況,為了保證仍能夠?qū)θ〈幚砩唐穾齑嫘畔⑦M行處理,增強對待處理商品庫存信息處理的容災能力,在緩存服務器出現(xiàn)故障的情況下,可以利用調(diào)用主服務器中的商品庫存信息,由主服務根據(jù)待處理商品庫存信息的標識,利用數(shù)據(jù)庫行級鎖對待處理商品庫存信息進行處理,詳細的原理,請參考現(xiàn)有相關(guān)技術(shù),在此不再贅述。
本實施例的商品庫存信息的處理方法,預先將商品庫存信息存儲在緩存服務器中,實現(xiàn)了商品庫存信息與商品庫存信息以外其他信息分別由不同的服務器存儲,減少了數(shù)據(jù)傳輸阻塞現(xiàn)象,提高了商品庫存信息并發(fā)處理能力。采用本實施例的技術(shù)方案,在高并發(fā)情況下,能夠降低商品庫存信息處理的延遲性、提高商品庫存信息處理的可用性;釋放了利用主服務器對商品庫存信息處理時占用的資源,提高了主服務器的性能,保證了主服務器中其它應用的可用性。
本實施例的商品庫存信息的處理方法,還將商品庫存信息存儲在主服務器中,實現(xiàn)了商品庫存信息的動態(tài)切換,采用本實施例的技術(shù)方案,能夠根據(jù)實際需求,利用主服務器或者利用緩存服務器對商品庫存信息進行處理,提高了對商品庫存信息處理的容災能力。
進一步地,上述實施例中,步驟202“主服務器檢測該標識對應的待處理商品庫存信息的存儲地址是否能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中”以一個待處理商品庫存信息的存儲地址為例對本發(fā)明的技術(shù)方案進行描述的,實際應用過程中,會存在對多個待處理商品庫存信息的存儲地址進行加鎖處理的情況。
例如,同一訂單中包含多個商品,不同商品對應的待處理商品庫存信息不同,此時需要對各待處理商品庫存信息進行多級加鎖處理。具體地,需要按照設定的排序規(guī)則對各待處理商品庫存信息進行排序,例如,先排prod_id,再排prod_sku_id,最后排[logst_id],形成一個對各待處理商品庫存信息加鎖處理的集合,并對集合中的對各待處理商品庫存信息按照步驟202的方法依次加鎖處理,若檢測到所有待處理商品庫存信息的存儲地址均能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,確定多級加鎖成功,否則,若檢測到任意一個待處理商品庫存信息的存儲地址不能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,確定多級加鎖失敗。
需要說明的是,當確定多級加鎖失敗后,并不需要進行死鎖處理,而是直接進行多級解鎖處理,該過程按照多級加鎖的逆向處理即可。例如,在對各加鎖后的待處理商品庫存信息的存儲地址進行解鎖前,先判斷是否加鎖成功,若判斷出加鎖成功,利用del命令進行解鎖,若判斷出加鎖失敗,無須進行解鎖處理,進行下一個待處理商品庫存信息的判斷,直至多級解鎖完成。
本實施例的商品庫存信息的處理方法,通過多級加鎖的方式,提高了商品庫存信息的處理效率。
實施例三
圖4為本發(fā)明的商品庫存信息的處理方法實施例三的流程圖,本實施例的商品庫存信息的處理方法在圖2所示實施例的基礎上,進一步更加詳細地對本發(fā)明的技術(shù)方案進行描述。
本實施例以待處理商品庫存信息的標識為主服務器生成的為例對本發(fā)明的技術(shù)方案進行描述。
如圖4所示,本實施例的商品庫存信息的處理方法,具體可以包括如下步驟:
400、主服務器檢測商品庫存信息的存儲位置;若檢測到商品庫存信息存儲在緩存服務器中,執(zhí)行步驟401;否則,若檢測到商品庫存信息存儲在主服務器中,執(zhí)行步驟410。
401、主服務器檢測生成待處理商品庫存信息的標識的過程中是否存在異常事件;若檢測到生成待處理商品庫存信息的標識的過程中存在異常事件,執(zhí)行步驟402;否則,若檢測到生成待處理商品庫存信息的標識的過程中不存在異常事件,執(zhí)行步驟403。
主服務器生成待處理商品庫存信息的標識之前需要在主服務器中執(zhí)行多步操作,該過程中可能出現(xiàn)某一操作失敗造成等異常事件,因此,主服務器需要檢測生成待處理商品庫存信息的標識的過程中是否存在異常事件;若檢測到生成待處理商品庫存信息的標識的過程中存在異常事件,對異常事件進行處理,執(zhí)行步驟402;若檢測到生成待處理商品庫存信息的標識的過程中不存在異常事件,執(zhí)行步驟403。
402、主服務器對異常事件進行處理。
在一個具體實現(xiàn)過程中,對異常事件進行處理即將Redis集群中的待處理商品庫存信息進行數(shù)據(jù)恢復至獲取待處理商品庫存信息的標識之前的數(shù)據(jù),以保證待處理商品庫存信息的準確性,主服務器可以再次進行下單操作等,并生成待處理商品庫存信息的標識,且該過程中未出現(xiàn)異常事件,主服務器跟該標識,在Redis集群完成相關(guān)操作。
403、主服務器檢測該標識對應的待處理商品庫存信息的存儲地址是否能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中;若檢測到存儲地址能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,執(zhí)行步驟404,否則,若檢測到存儲地址不能夠插入緩存服務器的數(shù)據(jù)庫結(jié)構(gòu)中,執(zhí)行步驟407。
404、主服務器確定對存儲地址加鎖成功。
405、主服務器檢測是否捕捉到在對待處理商品庫存信息進行處理過程中的異常操作;若未捕捉到異常操作,執(zhí)行步驟406;否則,若捕捉到異常操作,結(jié)束該流程。
406、主服務器對加鎖后的存儲地址進行解鎖處理。
407、主服務器確定對存儲地址加鎖失敗。
408、主服務器檢測該存儲地址是否為死鎖狀態(tài);若檢測到該存儲地址為死鎖狀態(tài),執(zhí)行步驟409;若檢測到該存儲地址不為死鎖狀態(tài),執(zhí)行步驟401。
409、主服務器對該存儲地址進行死鎖處理。
410、根據(jù)主服務器的數(shù)據(jù)庫結(jié)構(gòu),完成對商品庫存信息的處理。
在一個具體實現(xiàn)過程中,本實施例可以將在Redis集群中對商品庫存信息的處理的操作定義為事務前操作,將在主服務器中包括對商品庫存信息的處理的操作在內(nèi)的所有操作定義為事務操作。將當事務操作過程中存在異常事件,對異常事件處理的操作定義為補償操作。
本實施例的商品庫存信息的處理方法,通過對事務前操作進行異常信息檢測,當存在異常信息時,結(jié)束本次操作流程,保證了商品庫存信息和訂單信息一致性、商品庫存信息的準確性、訂單狀態(tài)的準確性等。
本實施例的商品庫存信息的處理方法,還通過對事務操作進行異常事件檢測,當存在異常事件時,對異常事件進行處理,以實現(xiàn)對整個處理流程進行補償處理,進一步保證了商品庫存信息和訂單信息一致性、商品庫存信息的準確性、訂單狀態(tài)的準確性等。
實施例四
圖5為本發(fā)明的商品庫存信息的處理系統(tǒng)的實施例一的結(jié)構(gòu)示意圖,如圖5所示,本實施例的商品庫存信息的處理系統(tǒng)可以包括緩存服務器10和主服務器20。
其中,商品庫存信息存儲在緩存服務器10中,商品庫存信息以外的信息存儲在主服務器20中。
主服務器20可以包括確定模塊201、加鎖模塊202和處理模塊203。
確定模塊201,用于根據(jù)待處理商品庫存信息的標識,確定緩存服務器10內(nèi)標識對應的待處理商品庫存信息的存儲地址;
加鎖模塊202,用于根據(jù)緩存服務器10的數(shù)據(jù)庫結(jié)構(gòu),對待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;
處理模塊203,用于根據(jù)加鎖模塊202得到的處理結(jié)果,對待處理商品庫存信息進行處理。
本實施例的商品庫存信息的處理系統(tǒng),通過采用上述各模塊實現(xiàn)對處待處理商品庫存信息進行處理的實現(xiàn)機制與上述圖1所示實施例的實現(xiàn)機制相同,詳細可以參考上述圖1所示實施例的記載,在此不再贅述。
本實施例的商品庫存信息的處理系統(tǒng),預先將商品庫存信息存儲在緩存服務器10中,商品庫存信息以外的信息存儲在所述主服務器20中,通過確定模塊201根據(jù)待處理商品庫存信息的標識,確定緩存服務器10內(nèi)標識對應的待處理商品庫存信息的存儲地址之后,利用加鎖模塊202對該標識對應的待處理商品庫存信息的存儲地址進行加鎖處理,得到處理結(jié)果;并由處理模塊203根據(jù)得到的處理結(jié)果,對待處理商品庫存信息進行處理,實現(xiàn)了商品庫存信息與商品庫存信息以外其他信息分別由不同的服務器存儲,減少了數(shù)據(jù)傳輸阻塞現(xiàn)象,提高了商品庫存信息并發(fā)處理能力。采用本實施例的技術(shù)方案,在高并發(fā)情況下,能夠降低商品庫存信息處理的延遲性、提高商品庫存信息處理的可用性。
實施例五
圖6為本發(fā)明的商品庫存信息的處理系統(tǒng)的實施例二的結(jié)構(gòu)示意圖,如圖6所示,本實施例的商品庫存信息的處理系統(tǒng)可在圖5所示實施例的基礎上,主服務器20進一步還可以包括解鎖模塊204、第一檢測模塊205和死鎖處理模塊206。
在一個具體實現(xiàn)過程中,加鎖模塊202,具體用于:
檢測待處理商品庫存信息的存儲地址是否能夠插入緩存服務器10的數(shù)據(jù)庫結(jié)構(gòu)中;
若檢測到該存儲地址能夠插入緩存服務器10的數(shù)據(jù)庫結(jié)構(gòu)中,確定對存儲地址加鎖成功;
若檢測到該存儲地址不能夠插入緩存服務器10的數(shù)據(jù)庫結(jié)構(gòu)中,確定對存儲地址加鎖失敗。
處理模塊203,具體用于:
若處理結(jié)果為確定對緩存服務器10中的存儲地址加鎖成功,根據(jù)待處理商品庫存信息的標識,對緩存服務器10中的待處理商品庫存信息進行修改處理;
若處理結(jié)果為確定對緩存服務器10中的存儲地址加鎖失敗,維持待處理商品庫存信息。
解鎖模塊204,用于加鎖模塊202確定對存儲地址加鎖成功后,對加鎖后的存儲地址進行解鎖處理。
第一檢測模塊205,用于加鎖模塊202確定對存儲地址加鎖失敗后,檢測緩存服務器10中的存儲地址是否為死鎖狀態(tài)。
具體地,第一檢測模塊205,用于:
獲取緩存服務器10中的存儲地址對應的值,
若獲取到緩存服務器10中的存儲地址對應的值與第一指定值匹配,確定加鎖后的存儲地址為死鎖狀態(tài)。
若未獲取到緩存服務器10中的存儲地址對應的值、若獲取到緩存服務器10中的存儲地址對應的值與第二指定值匹配或者若獲取到緩存服務器10中的存儲地址對應的值與第三指定值匹配,確定緩存服務器10中的存儲地址不為死鎖狀態(tài)。
死鎖處理模塊206,用于若第一檢測模塊205檢測到加鎖后的存儲地址為死鎖狀態(tài),對加鎖后的存儲地址進行死鎖處理。
如圖6所示,本實施例的商品庫存信息的處理系統(tǒng),主服務器20還可以包括第二檢測模塊207和異常處理模塊208。
第二檢測模塊207,用于檢測生成待處理商品庫存信息的標識的過程中是否存在異常事件;
異常處理模塊208,用于若檢測到生成待處理商品庫存信息的標識的過程中存在異常事件,對異常事件進行處理。
例如,對緩存服務器10中的待處理商品庫存信息恢復至初始數(shù)據(jù)。
在一個具體實現(xiàn)過程中,本實施例的商品庫存信息的處理系統(tǒng),還可以包括存儲模塊209和第三檢測模塊201。
存儲模塊209,用于存儲所述商品庫存信息;
第三檢測模塊210,用于檢測商品庫存信息的存儲位置;
第三檢測模塊210,還用于若檢測到商品庫存信息存儲在緩存服務器10中,觸發(fā)確定模塊根據(jù)待處理商品庫存信息的標識,確定緩存服務器內(nèi)所述標識對應的待處理商品庫存信息的存儲地址;若檢測到商品庫存信息存儲在存儲模塊209中,根據(jù)主服務器20的數(shù)據(jù)庫結(jié)構(gòu),完成對商品庫存信息的處理。
本實施例的商品庫存信息的處理系統(tǒng),通過采用上述各模塊及裝置實現(xiàn)對商品庫存信息的處理的實現(xiàn)機制與上述圖2和圖4所示實施例的實現(xiàn)機制相同,詳細可以參考上述圖2和圖4所示實施例的記載,在此不再贅述。
本領(lǐng)域內(nèi)的技術(shù)人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應包含在本申請的權(quán)利要求范圍之內(nèi)。