本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)以及計(jì)算機(jī)軟件技術(shù)領(lǐng)域,特別地涉及一種獲取信息的方法和系統(tǒng)。
背景技術(shù):
現(xiàn)實(shí)生活中經(jīng)常會(huì)有在高并發(fā)環(huán)境下需要獲取非重復(fù)的唯一識(shí)別符的場(chǎng)景。例如:用戶到手機(jī)運(yùn)營(yíng)商網(wǎng)店去辦理新的手機(jī)號(hào)碼,手機(jī)號(hào)碼即唯一識(shí)別符。購(gòu)買新車輛后需要在交通局上車牌號(hào),車牌號(hào)即唯一識(shí)別符。電子商務(wù)中商家需要為訂單開具發(fā)票,發(fā)票的相關(guān)信息中發(fā)票號(hào)碼即唯一識(shí)別符。下面以開具發(fā)票為例做詳細(xì)介紹。
目前發(fā)票系統(tǒng)開具發(fā)票使用流程是:首先通過(guò)系統(tǒng)的發(fā)票導(dǎo)入功能導(dǎo)入購(gòu)買的、空白的發(fā)票,然后各個(gè)開票人員通過(guò)不同的開票功能,獲取未使用的發(fā)票并進(jìn)行開票。具體地:目前發(fā)票系統(tǒng)在開票之前,直接查詢數(shù)據(jù)庫(kù),獲取發(fā)票狀態(tài)為“未使用”的最小的發(fā)票,然后進(jìn)行開票,開票完成后更新此張發(fā)票的發(fā)票狀態(tài)為“已使用”。上述現(xiàn)有技術(shù)至少存在如下缺陷。
1.數(shù)據(jù)庫(kù)中存在大量不同狀態(tài)、不同內(nèi)容的發(fā)票,并且數(shù)據(jù)量仍在持續(xù)的狂猛增長(zhǎng)中,因此查詢“未使用”狀態(tài)的最小發(fā)票的效率會(huì)越來(lái)越低,嚴(yán)重影響發(fā)票開具的效率,增加了開票的人力資源消耗,甚至導(dǎo)致客戶的投訴。
2.在大量開具發(fā)票的情況下,如此慢且并發(fā)量大的查詢會(huì)對(duì)數(shù)據(jù)庫(kù)造成特別大的讀壓力,高峰時(shí)期可能引起數(shù)據(jù)庫(kù)所在機(jī)器宕機(jī),從而導(dǎo)致開票系統(tǒng)癱瘓。
3.隨著開票業(yè)務(wù)的增長(zhǎng),開票人員和開票途徑也隨之增長(zhǎng),因此同一時(shí)間獲取到相同發(fā)票用于開票的幾率也愈來(lái)愈大,造成大量的開票失敗。嚴(yán)重影響了開票的效率和準(zhǔn)確性,增加了開票人員不必要的業(yè)務(wù)操作。
因此,為了解決并發(fā)開票問(wèn)題,急切需要一種獲取發(fā)票的服務(wù),此服務(wù)可快速的提供不重復(fù)的發(fā)票,提高開票效率和準(zhǔn)確性。從廣義上理解,目前需要一種能夠應(yīng)對(duì)大數(shù)據(jù)高并發(fā)的數(shù)據(jù)環(huán)境的獲取包含唯一識(shí)別符的信息的方法和系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種高效率的、能夠避免重復(fù)的獲取唯一識(shí)別符的方法和系統(tǒng),以解決現(xiàn)有技術(shù)中的上述問(wèn)題。
本發(fā)明的第一方面提出了一種獲取信息的方法,包括:從數(shù)據(jù)庫(kù)批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存,并且將所述多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用;根據(jù)外部請(qǐng)求從所述隊(duì)列式緩存中獲取目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符;根據(jù)所述目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符生成目標(biāo)信息然后輸出,并且將所述目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符的狀態(tài)更改為已使用。
可選地,所述從數(shù)據(jù)庫(kù)批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存的步驟包括:從數(shù)據(jù)庫(kù)定時(shí)地批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存。
可選地,所述從數(shù)據(jù)庫(kù)批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存,并且將所述多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用的步驟包括:利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù);判斷若當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的所述唯一識(shí)別符的數(shù)量小于預(yù)設(shè) 數(shù)值m,則從所述數(shù)據(jù)庫(kù)中的所有狀態(tài)為未使用的唯一識(shí)別符中選取m個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用;結(jié)束所述緩存鎖。
可選地,所述根據(jù)外部請(qǐng)求從所述隊(duì)列式緩存中獲取目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符的步驟包括:步驟b1:根據(jù)所述外部請(qǐng)求判斷當(dāng)前所述隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量x是否大于等于目標(biāo)數(shù)量y;步驟b2:若x≥y,則從所述隊(duì)列式緩存中獲取y個(gè)狀態(tài)為預(yù)占用的唯一識(shí)別符;步驟b3:若x<y,則利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù),然后從所述數(shù)據(jù)庫(kù)中獲取所述m個(gè)狀態(tài)為未使用的唯一識(shí)別符放入所述隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用,然后結(jié)束緩存鎖,跳至步驟b1。
可選地,所述唯一識(shí)別符為發(fā)票號(hào)碼、車牌號(hào)或手機(jī)號(hào)碼。
本發(fā)明的第二方面提出了一種獲取信息的系統(tǒng),包括:第一獲取模塊,用于從數(shù)據(jù)庫(kù)批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存,并且將所述多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用;第二獲取模塊,用于根據(jù)外部請(qǐng)求從所述隊(duì)列式緩存中獲取目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符;處理模塊,用于根據(jù)所述目標(biāo)數(shù)量的狀態(tài)為已使用的唯一識(shí)別符,生成目標(biāo)信息然后輸出,并且將所述目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符的狀態(tài)更改為已使用。
可選地,所述第一獲取模塊還用于:從數(shù)據(jù)庫(kù)定時(shí)地獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存。
可選地,所述第一獲取模塊還用于:利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù);判斷若當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的所述唯一識(shí)別符的數(shù)量小于預(yù)設(shè)數(shù)值m,則從所述數(shù)據(jù)庫(kù)中的所有狀態(tài)為未使用的唯一識(shí)別符中選取m個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存并 且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用;結(jié)束所述緩存鎖。
可選地,所述第二獲取模塊還用于:根據(jù)所述外部請(qǐng)求判斷當(dāng)前所述隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量x是否大于等于目標(biāo)數(shù)量y;若x≥y,則從所述隊(duì)列式緩存中獲取y個(gè)狀態(tài)為預(yù)占用的唯一識(shí)別符;若x<y,則利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù),然后從所述數(shù)據(jù)庫(kù)中獲取所述m個(gè)狀態(tài)為未使用的唯一識(shí)別符放入所述隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用,然后結(jié)束緩存鎖。
可選地,所述唯一識(shí)別符為發(fā)票號(hào)碼、車牌號(hào)或手機(jī)號(hào)碼。
本發(fā)明的技術(shù)方案采用了隊(duì)列式緩存技術(shù),將預(yù)占用唯一識(shí)別符和實(shí)際使用唯一識(shí)別符的兩個(gè)過(guò)程分離。由于后一過(guò)程是直接讀取隊(duì)列式緩存隊(duì)列,因此能夠降低了對(duì)系統(tǒng)數(shù)據(jù)庫(kù)和服務(wù)器的壓力,提高系統(tǒng)的可用率,從而保證快速、穩(wěn)定且準(zhǔn)確地獲取信息,廣泛適用于大數(shù)據(jù)下并發(fā)獲取信息的場(chǎng)景。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明實(shí)施方式的獲取信息的方法的主要步驟的示意圖;
圖2是根據(jù)本發(fā)明實(shí)施方式的獲取信息的系統(tǒng)的主要模塊的示意圖;
圖3是根據(jù)本發(fā)明實(shí)施方式的發(fā)票開具方法的發(fā)票緩存初始化過(guò)程的流程示意圖;
圖4是根據(jù)本發(fā)明實(shí)施方式的發(fā)票開具的方法的實(shí)際獲取發(fā)票過(guò)程的流程示意圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例做出說(shuō)明,其中包括本發(fā) 明實(shí)施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,可以對(duì)這里描述的實(shí)施例做出各種改變和修改,而不會(huì)背離本發(fā)明的范圍和精神。同樣,為了清楚和簡(jiǎn)明,以下的描述中省略了對(duì)公知功能和結(jié)構(gòu)的描述。
圖1是根據(jù)本發(fā)明實(shí)施方式的獲取信息的方法的主要步驟的示意圖。如圖1所示,該實(shí)施方式的獲取信息的方法主要包括如下步驟a至步驟c。
步驟a:從數(shù)據(jù)庫(kù)獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存,并且將多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用。其中,唯一識(shí)別符可以為發(fā)票號(hào)碼、車牌號(hào)或手機(jī)號(hào)碼等等。
需要說(shuō)明的是,唯一識(shí)別符的狀態(tài)標(biāo)記可以為“未使用”、“預(yù)占用”和“已使用”三者中的一種,這些狀態(tài)標(biāo)記被記錄在數(shù)據(jù)庫(kù)中。在執(zhí)行步驟a之前,數(shù)據(jù)庫(kù)中存儲(chǔ)了所有的狀態(tài)為未使用的唯一識(shí)別符,通常這些唯一識(shí)別符的總數(shù)目非常龐大。隊(duì)列式緩存可以為redis、memcached、xmemcached、ehcache或sapphire等等。這些緩存為鍵值型,其中鍵為唯一識(shí)別符。
可選地,定時(shí)地執(zhí)行上述步驟a,換言之,從數(shù)據(jù)庫(kù)定時(shí)地批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存,并且將多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用。通常可以采用quartz、jcrontab,scheduledexecutor或timer等等定時(shí)調(diào)度工具來(lái)實(shí)現(xiàn)上述定時(shí)任務(wù)。
可選地,步驟a具體包括如下的步驟a1至步驟a3。
步驟a1:利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù)。
步驟a2:判斷若當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量小于預(yù)設(shè)數(shù)值m,則從數(shù)據(jù)庫(kù)中的所有狀態(tài)為未使用的唯一識(shí) 別符中選取m個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用。
步驟a3:結(jié)束緩存鎖。
由于步驟a2中引入了一個(gè)數(shù)值判斷過(guò)程,可以有效地避免“由于不斷地向從數(shù)據(jù)庫(kù)向緩存轉(zhuǎn)移唯一識(shí)別符,從而緩存中堆積大量唯一識(shí)別符,導(dǎo)致使用效率低下”的情況。
步驟b:根據(jù)外部請(qǐng)求從隊(duì)列式緩存中獲取目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符。其中,外部請(qǐng)求中包括目標(biāo)數(shù)量這一參數(shù)。外部請(qǐng)求是指“需要獲取包括目標(biāo)數(shù)量的唯一識(shí)別符的目標(biāo)信息”請(qǐng)求。
可選地,步驟b具體包括如下步驟b1和步驟b3。
步驟b1:根據(jù)外部請(qǐng)求判斷當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量x是否大于等于目標(biāo)數(shù)量y。
步驟b2:若x≥y,則從隊(duì)列式緩存中獲取y個(gè)狀態(tài)為預(yù)占用的唯一識(shí)別符。
步驟b3:若x<y,則利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù),然后從數(shù)據(jù)庫(kù)中選取預(yù)設(shè)數(shù)值個(gè)(即m個(gè))狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存并且將這預(yù)設(shè)數(shù)值個(gè)(即m個(gè))唯一識(shí)別符的狀態(tài)更改為預(yù)占用,然后結(jié)束緩存鎖,跳至步驟b1。
由于步驟b3意味著當(dāng)緩存中的唯一識(shí)別符數(shù)量不足時(shí)能夠及時(shí)補(bǔ)充新一批唯一識(shí)別符進(jìn)來(lái),因此可以保障流程順利進(jìn)行。
步驟c:根據(jù)目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符生成目標(biāo)信息然后輸出,并且將目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符的狀態(tài)更改為已使用。
具體過(guò)程為:首先根據(jù)目標(biāo)數(shù)量的、從緩存中獲取到的、狀態(tài)為預(yù)占用的唯一識(shí)別符,按照預(yù)設(shè)規(guī)則生成預(yù)設(shè)格式的目標(biāo)信息。然后輸出目標(biāo)信息,并且在數(shù)據(jù)庫(kù)中將唯一識(shí)別符對(duì)應(yīng)的狀態(tài)信息由“預(yù) 占用”更改為“已使用”。
圖2是根據(jù)本發(fā)明實(shí)施方式的獲取信息的系統(tǒng)的主要模塊的示意圖。如圖2所示,該實(shí)施方式的獲取信息的系統(tǒng)2主要包括:第一獲取模塊21、第二獲取模塊22和處理模塊23。第一獲取模塊21用于從數(shù)據(jù)庫(kù)批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存,并且將多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用。第二獲取模塊22用于根據(jù)外部請(qǐng)求從隊(duì)列式緩存中獲取目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符。處理模塊23用于根據(jù)目標(biāo)數(shù)量的狀態(tài)為已使用的唯一識(shí)別符,生成目標(biāo)信息然后輸出,并且將目標(biāo)數(shù)量的狀態(tài)為預(yù)占用的唯一識(shí)別符的狀態(tài)更改為已使用。其中,唯一識(shí)別符可以為發(fā)票號(hào)碼、車牌號(hào)或手機(jī)號(hào)碼等等。
可選地,第一獲取模塊21還用于:從數(shù)據(jù)庫(kù)定時(shí)地批量獲取多個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存,并且將多個(gè)狀態(tài)為未使用的唯一識(shí)別符的狀態(tài)更改為預(yù)占用。通常地,第一獲取模塊21中可以采用quartz、jcrontab,scheduledexecutor或timer等等定時(shí)調(diào)度工具來(lái)實(shí)現(xiàn)上述定時(shí)任務(wù)。
可選地,第一獲取模塊21還用于:利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù);判斷若當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量小于預(yù)設(shè)數(shù)值m,則從數(shù)據(jù)庫(kù)中的所有狀態(tài)為未使用的唯一識(shí)別符中選取m個(gè)狀態(tài)為未使用的唯一識(shí)別符然后放入隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別符的狀態(tài)更改為預(yù)占用;結(jié)束緩存鎖。
可選地,第二獲取模塊22還用于:根據(jù)外部請(qǐng)求判斷當(dāng)前隊(duì)列式緩存中的狀態(tài)為預(yù)占用的唯一識(shí)別符的數(shù)量x是否大于等于目標(biāo)數(shù)量y;若x≥y,則從隊(duì)列式緩存中獲取y個(gè)狀態(tài)為預(yù)占用的唯一識(shí)別符;若x<y,則利用緩存鎖確認(rèn)當(dāng)前無(wú)并發(fā)任務(wù),然后從數(shù)據(jù)庫(kù)中選取m個(gè)狀態(tài)為未使用的唯一識(shí)別符放入隊(duì)列式緩存并且將這m個(gè)唯一識(shí)別 符的狀態(tài)更改為預(yù)占用,然后結(jié)束緩存鎖。
由上可知,本發(fā)明實(shí)施方式的獲取信息的方法和系統(tǒng)采用了隊(duì)列式緩存技術(shù),將預(yù)占用唯一識(shí)別符和實(shí)際使用唯一識(shí)別符的兩個(gè)過(guò)程分離。由于后一過(guò)程是直接讀取隊(duì)列式緩存隊(duì)列,因此能夠降低了對(duì)系統(tǒng)數(shù)據(jù)庫(kù)和服務(wù)器的壓力,提高系統(tǒng)的可用率,從而保證快速、穩(wěn)定且準(zhǔn)確地獲取信息,廣泛適用于大數(shù)據(jù)下并發(fā)獲取信息的場(chǎng)景。
為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明實(shí)施方式的獲取信息的方法和系統(tǒng),下面結(jié)合圖3和圖4列舉一個(gè)關(guān)于開具發(fā)票的具體實(shí)施例做詳細(xì)介紹。該實(shí)施例的開具發(fā)票的方法包括發(fā)票緩存初始化(相當(dāng)于上文的步驟a)、實(shí)際獲取發(fā)票(相當(dāng)于上文中的步驟b)以及開具發(fā)票并且輸出發(fā)票(相當(dāng)于上文中的步驟c)這三個(gè)過(guò)程,下面重點(diǎn)介紹前兩個(gè)過(guò)程。
圖3是根據(jù)本發(fā)明實(shí)施方式的發(fā)票開具方法的發(fā)票緩存初始化過(guò)程的流程示意圖。如圖3所示,首先向數(shù)據(jù)庫(kù)中導(dǎo)入所有的可使用的發(fā)票,然后基于quartz技術(shù)執(zhí)行定時(shí)批量緩存發(fā)票操作。定時(shí)任務(wù)在獲取發(fā)票前執(zhí)行,用于將未使用的發(fā)票提前放置緩存中。quartz的優(yōu)勢(shì)是可自定義執(zhí)行的頻率和時(shí)間,隨著業(yè)務(wù)的增長(zhǎng)可隨時(shí)調(diào)整執(zhí)行的時(shí)間。緩存鎖是在分布式部署環(huán)境下,避免并發(fā)的重要手段。因此每次執(zhí)行緩存發(fā)票操作前,都須調(diào)用redis的setnx方法獲取緩存鎖來(lái)判斷當(dāng)前是否存在并發(fā)情況,這樣可以避免由于發(fā)票重復(fù)存入緩存而造成的開票失敗問(wèn)題,可以保證同一時(shí)間段內(nèi)不會(huì)有多個(gè)機(jī)器將相同的發(fā)票放入緩存中,即保證獲取的發(fā)票信息準(zhǔn)確且唯一。然后從數(shù)據(jù)庫(kù)中查詢預(yù)設(shè)數(shù)量m個(gè)的未使用的發(fā)票。由于業(yè)務(wù)需求量不同,需要的發(fā)票量也不同,所以查詢的發(fā)票量為自定義設(shè)置,根據(jù)需求量隨時(shí)調(diào)整。將獲取到的發(fā)票放入緩存隊(duì)列中,并且更新發(fā)票狀態(tài)為預(yù)占用,表明此發(fā)票已被放置緩存中、等待被使用。這兩步操作放置數(shù)據(jù)庫(kù)事務(wù)中,根據(jù)事務(wù)的特性,可保證同時(shí)成功或同時(shí)失敗,避免緩存和數(shù) 據(jù)庫(kù)發(fā)票狀態(tài)不一致。執(zhí)行完發(fā)票獲取和緩存的操作后,及時(shí)釋放緩存鎖,等待下次其他機(jī)器的調(diào)用。緩存鎖有設(shè)置失效時(shí)間,可以避免由于緩存未清除而導(dǎo)致系統(tǒng)不可用的異常情況。
圖4是根據(jù)本發(fā)明實(shí)施方式的發(fā)票開具的方法的實(shí)際獲取發(fā)票過(guò)程的流程示意圖。如圖4所示,當(dāng)接收到需要開具發(fā)票的外部請(qǐng)求之后,便從緩存隊(duì)列中獲取目標(biāo)數(shù)量的預(yù)占用發(fā)票。從緩存隊(duì)列中拿到相應(yīng)的預(yù)占用發(fā)票后,緩存隊(duì)列中同步清除該發(fā)票數(shù)據(jù),這樣避免他人重復(fù)取票,保證了在并發(fā)情況下不會(huì)獲取到相同的發(fā)票。如果緩存中沒(méi)有足夠多的可用的預(yù)占用發(fā)票,則先緩存新一批可用發(fā)票至緩存中,再進(jìn)行獲取發(fā)票操作。緩存發(fā)票操作也應(yīng)先獲取執(zhí)行鎖,確保本次緩存的發(fā)票數(shù)據(jù)不會(huì)同時(shí)被其他機(jī)器緩存。
由上可知,上述實(shí)施方式的發(fā)票開具方法基于開源工具包quartz實(shí)現(xiàn)定時(shí)調(diào)度,定時(shí)批量獲取可使用的發(fā)票數(shù)據(jù),并且基于開源緩存技術(shù)redis的隊(duì)列特性,快速的獲取緩存中可用于開票的發(fā)票。該方法具有高效率、防重復(fù)的優(yōu)點(diǎn)。
上述具體實(shí)施方式,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計(jì)要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)范圍之內(nèi)。