本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種大數(shù)量訂票的方法和系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)的迅速發(fā)展,人們越來越多地通過互聯(lián)網(wǎng)來參與各種經(jīng)濟(jì)活動(dòng),其中就包括各種訂票活動(dòng),比如火車票、飛機(jī)票、電影票、演出票,等等。通過互聯(lián)網(wǎng)訂票擁有諸多優(yōu)勢,例如不用排隊(duì),不會(huì)白費(fèi)太多時(shí)間(比如排長隊(duì)可能輪到自己時(shí)沒票白排了或買票人員下班了),無論訂不訂得上,都不會(huì)太失望,上網(wǎng)方便,隨時(shí)可以嘗試,買票時(shí)間相對自由。
然而網(wǎng)絡(luò)訂票與傳統(tǒng)訂票一個(gè)最大的不同就是并發(fā)性,只要開始訂票了,大家可以同時(shí)開始訂票的操作,尤其一些大型活動(dòng)的票,往往在短時(shí)間內(nèi)就被訂完,在這個(gè)過程中,經(jīng)常會(huì)出現(xiàn)大數(shù)據(jù)量的并發(fā)計(jì)算,并發(fā)訪問量大但既有互聯(lián)網(wǎng)接入寬帶明顯不足,就造成了網(wǎng)絡(luò)擁堵。
例如,由于網(wǎng)絡(luò)擁塞,火車票訂票系統(tǒng)就出現(xiàn)了網(wǎng)站未及時(shí)或完整地收到銀行的成功支付信息,造成旅客成功支付但網(wǎng)站顯示購票未成功的現(xiàn)象。
還有的情況就是,少數(shù)用戶由于網(wǎng)絡(luò)情況較好,而能夠重復(fù)訂到多數(shù)的票;或者幾個(gè)用戶訂到同一張票的情況,這些都給出票組織和訂票用戶帶來了很大的麻煩。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種大數(shù)量訂票的方法和系統(tǒng),可以實(shí)現(xiàn)用戶快速訂票,并保證訂票工作的準(zhǔn)確性和效率。
本發(fā)明提供了一種大數(shù)量訂票的方法,包括以下步驟:
確定票的總數(shù),給每張票生成唯一的票號;
給每個(gè)用戶生成唯一的用戶ID;
用戶發(fā)送訂票指令后,將生成一個(gè)鍵值,所述鍵值包括用戶ID和對應(yīng)的票號;
后面的用戶訂票時(shí),將其鍵值與前面已經(jīng)生成的鍵值進(jìn)行對比,如果相同,則取消后面的鍵值,如果不同,則保留后面的鍵值;
直到所有票訂完,流程結(jié)束。
優(yōu)選地,所述后面的用戶訂票時(shí),將其鍵值與前面已經(jīng)生成的鍵值進(jìn)行對比,進(jìn)一步包括以下步驟:
將鍵值中的用戶ID進(jìn)行對比,如果相同,則取消后面的鍵值;
如果不同,則將鍵值中的票號進(jìn)行對比,如果相同,則取消后面的鍵值;
如果不同,則保留后面的鍵值。
優(yōu)選地,所述鍵值采用Redis緩存數(shù)據(jù)庫存儲(chǔ)。
優(yōu)選地,所述鍵值設(shè)置為原子型。
優(yōu)選地,所述票號的生成采用遞歸算法。
優(yōu)選地,用戶通過微信平臺發(fā)送訂票指令。
本發(fā)明還提供了一種大數(shù)量訂票的系統(tǒng),包括生成單元、存儲(chǔ)單元和對比單元,其中,
生成單元用于生成票號和用戶ID;
存儲(chǔ)單元用于存儲(chǔ)包括用戶ID和對應(yīng)票號的鍵值;
對比單元用于將新生成的鍵值與已經(jīng)生成的鍵值進(jìn)行對比。
優(yōu)選地,所述存儲(chǔ)單元是Redis緩存數(shù)據(jù)庫。
優(yōu)選地,還包括微信平臺,所述微信平臺用于發(fā)送訂票指令。
優(yōu)選地,所述對比單元進(jìn)一步用于將鍵值中的用戶ID進(jìn)行對比,如果相同,則取消后面的鍵值;如果不同,則將鍵值中的票號進(jìn)行對比,如果相同,則取消后面的鍵值;如果不同,則保留后面的鍵值。
本發(fā)明技術(shù)方案由于采用了Redis緩存數(shù)據(jù)庫的原子型鍵值來存儲(chǔ)用戶ID和票號,能夠快速地進(jìn)行比對,從而提高訂票的速度,同時(shí)保證用戶不能重復(fù)訂票,也不會(huì)出現(xiàn)多個(gè)用戶訂上同一張票的情況,提高了訂票的準(zhǔn)確性。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
附圖說明
附圖用來提供對本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:
圖1為本發(fā)明實(shí)施例一中大數(shù)量訂票的流程圖;
圖2為本發(fā)明實(shí)施例一中大數(shù)量訂票系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
圖1為本發(fā)明實(shí)施例一中大數(shù)量訂票的流程圖。如圖1所示,該大數(shù)量訂票的流程包括以下步驟:
步驟101、確定準(zhǔn)備投放票的總數(shù),采用遞歸算法給每張票生成唯一的票號,例如電影票可以是幾排幾號。
步驟102、用戶獲取訂票的信息后,可以通過微信平臺發(fā)送訂票指令。
步驟103、給每個(gè)用戶生成唯一的用戶ID,這些用戶ID可以就是用戶名本身。
步驟104、用戶發(fā)送訂票指令后,將生成一個(gè)鍵值,該鍵值包括用戶ID和對應(yīng)的票號,并存儲(chǔ)到Redis緩存數(shù)據(jù)庫,鍵值設(shè)置為原子型。
步驟105、后面的用戶訂票時(shí),將其鍵值與前面已經(jīng)生成的鍵值進(jìn)行對比。首先將鍵值中的用戶ID進(jìn)行對比,如果相同,則表示該用戶已經(jīng)成功訂了票了,所以取消后面的鍵值。
步驟106、如果不同,則將鍵值中的票號進(jìn)行對比,如果相同,則表示該票號對應(yīng)的票已經(jīng)被其他用戶訂走了,所以也取消后面的鍵值。
步驟107、如果不同,則保留后面的鍵值,表示后面的這個(gè)用戶成功地訂了這張票。
步驟108、直到所有票訂完,流程結(jié)束。
為了實(shí)現(xiàn)上述流程,本實(shí)施例還提供了一種大數(shù)量訂票系統(tǒng),圖2為本發(fā)明實(shí)施例一中大數(shù)量訂票系統(tǒng)的結(jié)構(gòu)圖。如圖2所示,該大數(shù)量訂票的系統(tǒng)包括生成單元201、存儲(chǔ)單元202、對比單元203和微信平臺204。
其中用戶通過微信平臺發(fā)送訂票指令。
生成單元生成票號和用戶ID。
存儲(chǔ)單元是Redis緩存數(shù)據(jù)庫,用于存儲(chǔ)包括用戶ID和對應(yīng)票號的鍵值。
對比單元將鍵值中的用戶ID進(jìn)行對比,如果相同,則取消后面的鍵值;如果不同,則將鍵值中的票號進(jìn)行對比,如果相同,則取消后面的鍵值;如果不同,則保留后面的鍵值。
上述實(shí)施例由于采用了Redis緩存數(shù)據(jù)庫的原子型鍵值來存儲(chǔ)用戶ID和票號,能夠快速地進(jìn)行比對,從而提高訂票的速度,同時(shí)保證用戶不能重復(fù)訂票,也不會(huì)出現(xiàn)多個(gè)用戶訂上同一張票的情況,提高了訂票的準(zhǔn)確性。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包 含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。