国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      獲取信息的方法和系統(tǒng)與流程

      文檔序號:11177057閱讀:296來源:國知局
      獲取信息的方法和系統(tǒng)與流程

      本發(fā)明涉及計算機網絡以及計算機軟件技術領域,特別地涉及一種獲取信息的方法和系統(tǒng)。



      背景技術:

      現實生活中經常會有在高并發(fā)環(huán)境下需要獲取非重復的唯一識別符的場景。例如:用戶到手機運營商網店去辦理新的手機號碼,手機號碼即唯一識別符。購買新車輛后需要在交通局上車牌號,車牌號即唯一識別符。電子商務中商家需要為訂單開具發(fā)票,發(fā)票的相關信息中發(fā)票號碼即唯一識別符。下面以開具發(fā)票為例做詳細介紹。

      目前發(fā)票系統(tǒng)開具發(fā)票使用流程是:首先通過系統(tǒng)的發(fā)票導入功能導入購買的、空白的發(fā)票,然后各個開票人員通過不同的開票功能,獲取未使用的發(fā)票并進行開票。具體地:目前發(fā)票系統(tǒng)在開票之前,直接查詢數據庫,獲取發(fā)票狀態(tài)為“未使用”的最小的發(fā)票,然后進行開票,開票完成后更新此張發(fā)票的發(fā)票狀態(tài)為“已使用”。上述現有技術至少存在如下缺陷。

      1.數據庫中存在大量不同狀態(tài)、不同內容的發(fā)票,并且數據量仍在持續(xù)的狂猛增長中,因此查詢“未使用”狀態(tài)的最小發(fā)票的效率會越來越低,嚴重影響發(fā)票開具的效率,增加了開票的人力資源消耗,甚至導致客戶的投訴。

      2.在大量開具發(fā)票的情況下,如此慢且并發(fā)量大的查詢會對數據庫造成特別大的讀壓力,高峰時期可能引起數據庫所在機器宕機,從而導致開票系統(tǒng)癱瘓。

      3.隨著開票業(yè)務的增長,開票人員和開票途徑也隨之增長,因此同一時間獲取到相同發(fā)票用于開票的幾率也愈來愈大,造成大量的開票失敗。嚴重影響了開票的效率和準確性,增加了開票人員不必要的業(yè)務操作。

      因此,為了解決并發(fā)開票問題,急切需要一種獲取發(fā)票的服務,此服務可快速的提供不重復的發(fā)票,提高開票效率和準確性。從廣義上理解,目前需要一種能夠應對大數據高并發(fā)的數據環(huán)境的獲取包含唯一識別符的信息的方法和系統(tǒng)。



      技術實現要素:

      有鑒于此,本發(fā)明提供一種高效率的、能夠避免重復的獲取唯一識別符的方法和系統(tǒng),以解決現有技術中的上述問題。

      本發(fā)明的第一方面提出了一種獲取信息的方法,包括:從數據庫批量獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存,并且將所述多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用;根據外部請求從所述隊列式緩存中獲取目標數量的狀態(tài)為預占用的唯一識別符;根據所述目標數量的狀態(tài)為預占用的唯一識別符生成目標信息然后輸出,并且將所述目標數量的狀態(tài)為預占用的唯一識別符的狀態(tài)更改為已使用。

      可選地,所述從數據庫批量獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存的步驟包括:從數據庫定時地批量獲取多個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存。

      可選地,所述從數據庫批量獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存,并且將所述多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用的步驟包括:利用緩存鎖確認當前無并發(fā)任務;判斷若當前隊列式緩存中的狀態(tài)為預占用的所述唯一識別符的數量小于預設 數值m,則從所述數據庫中的所有狀態(tài)為未使用的唯一識別符中選取m個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存并且將這m個唯一識別符的狀態(tài)更改為預占用;結束所述緩存鎖。

      可選地,所述根據外部請求從所述隊列式緩存中獲取目標數量的狀態(tài)為預占用的唯一識別符的步驟包括:步驟b1:根據所述外部請求判斷當前所述隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量x是否大于等于目標數量y;步驟b2:若x≥y,則從所述隊列式緩存中獲取y個狀態(tài)為預占用的唯一識別符;步驟b3:若x<y,則利用緩存鎖確認當前無并發(fā)任務,然后從所述數據庫中獲取所述m個狀態(tài)為未使用的唯一識別符放入所述隊列式緩存并且將這m個唯一識別符的狀態(tài)更改為預占用,然后結束緩存鎖,跳至步驟b1。

      可選地,所述唯一識別符為發(fā)票號碼、車牌號或手機號碼。

      本發(fā)明的第二方面提出了一種獲取信息的系統(tǒng),包括:第一獲取模塊,用于從數據庫批量獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存,并且將所述多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用;第二獲取模塊,用于根據外部請求從所述隊列式緩存中獲取目標數量的狀態(tài)為預占用的唯一識別符;處理模塊,用于根據所述目標數量的狀態(tài)為已使用的唯一識別符,生成目標信息然后輸出,并且將所述目標數量的狀態(tài)為預占用的唯一識別符的狀態(tài)更改為已使用。

      可選地,所述第一獲取模塊還用于:從數據庫定時地獲取多個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存。

      可選地,所述第一獲取模塊還用于:利用緩存鎖確認當前無并發(fā)任務;判斷若當前隊列式緩存中的狀態(tài)為預占用的所述唯一識別符的數量小于預設數值m,則從所述數據庫中的所有狀態(tài)為未使用的唯一識別符中選取m個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存并 且將這m個唯一識別符的狀態(tài)更改為預占用;結束所述緩存鎖。

      可選地,所述第二獲取模塊還用于:根據所述外部請求判斷當前所述隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量x是否大于等于目標數量y;若x≥y,則從所述隊列式緩存中獲取y個狀態(tài)為預占用的唯一識別符;若x<y,則利用緩存鎖確認當前無并發(fā)任務,然后從所述數據庫中獲取所述m個狀態(tài)為未使用的唯一識別符放入所述隊列式緩存并且將這m個唯一識別符的狀態(tài)更改為預占用,然后結束緩存鎖。

      可選地,所述唯一識別符為發(fā)票號碼、車牌號或手機號碼。

      本發(fā)明的技術方案采用了隊列式緩存技術,將預占用唯一識別符和實際使用唯一識別符的兩個過程分離。由于后一過程是直接讀取隊列式緩存隊列,因此能夠降低了對系統(tǒng)數據庫和服務器的壓力,提高系統(tǒng)的可用率,從而保證快速、穩(wěn)定且準確地獲取信息,廣泛適用于大數據下并發(fā)獲取信息的場景。

      附圖說明

      圖1是根據本發(fā)明實施方式的獲取信息的方法的主要步驟的示意圖;

      圖2是根據本發(fā)明實施方式的獲取信息的系統(tǒng)的主要模塊的示意圖;

      圖3是根據本發(fā)明實施方式的發(fā)票開具方法的發(fā)票緩存初始化過程的流程示意圖;

      圖4是根據本發(fā)明實施方式的發(fā)票開具的方法的實際獲取發(fā)票過程的流程示意圖。

      具體實施方式

      以下結合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā) 明實施例的各種細節(jié)以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結構的描述。

      圖1是根據本發(fā)明實施方式的獲取信息的方法的主要步驟的示意圖。如圖1所示,該實施方式的獲取信息的方法主要包括如下步驟a至步驟c。

      步驟a:從數據庫獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存,并且將多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用。其中,唯一識別符可以為發(fā)票號碼、車牌號或手機號碼等等。

      需要說明的是,唯一識別符的狀態(tài)標記可以為“未使用”、“預占用”和“已使用”三者中的一種,這些狀態(tài)標記被記錄在數據庫中。在執(zhí)行步驟a之前,數據庫中存儲了所有的狀態(tài)為未使用的唯一識別符,通常這些唯一識別符的總數目非常龐大。隊列式緩存可以為redis、memcached、xmemcached、ehcache或sapphire等等。這些緩存為鍵值型,其中鍵為唯一識別符。

      可選地,定時地執(zhí)行上述步驟a,換言之,從數據庫定時地批量獲取多個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存,并且將多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用。通??梢圆捎胵uartz、jcrontab,scheduledexecutor或timer等等定時調度工具來實現上述定時任務。

      可選地,步驟a具體包括如下的步驟a1至步驟a3。

      步驟a1:利用緩存鎖確認當前無并發(fā)任務。

      步驟a2:判斷若當前隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量小于預設數值m,則從數據庫中的所有狀態(tài)為未使用的唯一識 別符中選取m個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存并且將這m個唯一識別符的狀態(tài)更改為預占用。

      步驟a3:結束緩存鎖。

      由于步驟a2中引入了一個數值判斷過程,可以有效地避免“由于不斷地向從數據庫向緩存轉移唯一識別符,從而緩存中堆積大量唯一識別符,導致使用效率低下”的情況。

      步驟b:根據外部請求從隊列式緩存中獲取目標數量的狀態(tài)為預占用的唯一識別符。其中,外部請求中包括目標數量這一參數。外部請求是指“需要獲取包括目標數量的唯一識別符的目標信息”請求。

      可選地,步驟b具體包括如下步驟b1和步驟b3。

      步驟b1:根據外部請求判斷當前隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量x是否大于等于目標數量y。

      步驟b2:若x≥y,則從隊列式緩存中獲取y個狀態(tài)為預占用的唯一識別符。

      步驟b3:若x<y,則利用緩存鎖確認當前無并發(fā)任務,然后從數據庫中選取預設數值個(即m個)狀態(tài)為未使用的唯一識別符放入隊列式緩存并且將這預設數值個(即m個)唯一識別符的狀態(tài)更改為預占用,然后結束緩存鎖,跳至步驟b1。

      由于步驟b3意味著當緩存中的唯一識別符數量不足時能夠及時補充新一批唯一識別符進來,因此可以保障流程順利進行。

      步驟c:根據目標數量的狀態(tài)為預占用的唯一識別符生成目標信息然后輸出,并且將目標數量的狀態(tài)為預占用的唯一識別符的狀態(tài)更改為已使用。

      具體過程為:首先根據目標數量的、從緩存中獲取到的、狀態(tài)為預占用的唯一識別符,按照預設規(guī)則生成預設格式的目標信息。然后輸出目標信息,并且在數據庫中將唯一識別符對應的狀態(tài)信息由“預 占用”更改為“已使用”。

      圖2是根據本發(fā)明實施方式的獲取信息的系統(tǒng)的主要模塊的示意圖。如圖2所示,該實施方式的獲取信息的系統(tǒng)2主要包括:第一獲取模塊21、第二獲取模塊22和處理模塊23。第一獲取模塊21用于從數據庫批量獲取多個狀態(tài)為未使用的唯一識別符放入隊列式緩存,并且將多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用。第二獲取模塊22用于根據外部請求從隊列式緩存中獲取目標數量的狀態(tài)為預占用的唯一識別符。處理模塊23用于根據目標數量的狀態(tài)為已使用的唯一識別符,生成目標信息然后輸出,并且將目標數量的狀態(tài)為預占用的唯一識別符的狀態(tài)更改為已使用。其中,唯一識別符可以為發(fā)票號碼、車牌號或手機號碼等等。

      可選地,第一獲取模塊21還用于:從數據庫定時地批量獲取多個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存,并且將多個狀態(tài)為未使用的唯一識別符的狀態(tài)更改為預占用。通常地,第一獲取模塊21中可以采用quartz、jcrontab,scheduledexecutor或timer等等定時調度工具來實現上述定時任務。

      可選地,第一獲取模塊21還用于:利用緩存鎖確認當前無并發(fā)任務;判斷若當前隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量小于預設數值m,則從數據庫中的所有狀態(tài)為未使用的唯一識別符中選取m個狀態(tài)為未使用的唯一識別符然后放入隊列式緩存并且將這m個唯一識別符的狀態(tài)更改為預占用;結束緩存鎖。

      可選地,第二獲取模塊22還用于:根據外部請求判斷當前隊列式緩存中的狀態(tài)為預占用的唯一識別符的數量x是否大于等于目標數量y;若x≥y,則從隊列式緩存中獲取y個狀態(tài)為預占用的唯一識別符;若x<y,則利用緩存鎖確認當前無并發(fā)任務,然后從數據庫中選取m個狀態(tài)為未使用的唯一識別符放入隊列式緩存并且將這m個唯一識別 符的狀態(tài)更改為預占用,然后結束緩存鎖。

      由上可知,本發(fā)明實施方式的獲取信息的方法和系統(tǒng)采用了隊列式緩存技術,將預占用唯一識別符和實際使用唯一識別符的兩個過程分離。由于后一過程是直接讀取隊列式緩存隊列,因此能夠降低了對系統(tǒng)數據庫和服務器的壓力,提高系統(tǒng)的可用率,從而保證快速、穩(wěn)定且準確地獲取信息,廣泛適用于大數據下并發(fā)獲取信息的場景。

      為使本領域技術人員更好地理解本發(fā)明實施方式的獲取信息的方法和系統(tǒng),下面結合圖3和圖4列舉一個關于開具發(fā)票的具體實施例做詳細介紹。該實施例的開具發(fā)票的方法包括發(fā)票緩存初始化(相當于上文的步驟a)、實際獲取發(fā)票(相當于上文中的步驟b)以及開具發(fā)票并且輸出發(fā)票(相當于上文中的步驟c)這三個過程,下面重點介紹前兩個過程。

      圖3是根據本發(fā)明實施方式的發(fā)票開具方法的發(fā)票緩存初始化過程的流程示意圖。如圖3所示,首先向數據庫中導入所有的可使用的發(fā)票,然后基于quartz技術執(zhí)行定時批量緩存發(fā)票操作。定時任務在獲取發(fā)票前執(zhí)行,用于將未使用的發(fā)票提前放置緩存中。quartz的優(yōu)勢是可自定義執(zhí)行的頻率和時間,隨著業(yè)務的增長可隨時調整執(zhí)行的時間。緩存鎖是在分布式部署環(huán)境下,避免并發(fā)的重要手段。因此每次執(zhí)行緩存發(fā)票操作前,都須調用redis的setnx方法獲取緩存鎖來判斷當前是否存在并發(fā)情況,這樣可以避免由于發(fā)票重復存入緩存而造成的開票失敗問題,可以保證同一時間段內不會有多個機器將相同的發(fā)票放入緩存中,即保證獲取的發(fā)票信息準確且唯一。然后從數據庫中查詢預設數量m個的未使用的發(fā)票。由于業(yè)務需求量不同,需要的發(fā)票量也不同,所以查詢的發(fā)票量為自定義設置,根據需求量隨時調整。將獲取到的發(fā)票放入緩存隊列中,并且更新發(fā)票狀態(tài)為預占用,表明此發(fā)票已被放置緩存中、等待被使用。這兩步操作放置數據庫事務中,根據事務的特性,可保證同時成功或同時失敗,避免緩存和數 據庫發(fā)票狀態(tài)不一致。執(zhí)行完發(fā)票獲取和緩存的操作后,及時釋放緩存鎖,等待下次其他機器的調用。緩存鎖有設置失效時間,可以避免由于緩存未清除而導致系統(tǒng)不可用的異常情況。

      圖4是根據本發(fā)明實施方式的發(fā)票開具的方法的實際獲取發(fā)票過程的流程示意圖。如圖4所示,當接收到需要開具發(fā)票的外部請求之后,便從緩存隊列中獲取目標數量的預占用發(fā)票。從緩存隊列中拿到相應的預占用發(fā)票后,緩存隊列中同步清除該發(fā)票數據,這樣避免他人重復取票,保證了在并發(fā)情況下不會獲取到相同的發(fā)票。如果緩存中沒有足夠多的可用的預占用發(fā)票,則先緩存新一批可用發(fā)票至緩存中,再進行獲取發(fā)票操作。緩存發(fā)票操作也應先獲取執(zhí)行鎖,確保本次緩存的發(fā)票數據不會同時被其他機器緩存。

      由上可知,上述實施方式的發(fā)票開具方法基于開源工具包quartz實現定時調度,定時批量獲取可使用的發(fā)票數據,并且基于開源緩存技術redis的隊列特性,快速的獲取緩存中可用于開票的發(fā)票。該方法具有高效率、防重復的優(yōu)點。

      上述具體實施方式,并不構成對本發(fā)明保護范圍的限制。本領域技術人員應該明白的是,取決于設計要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內所作的修改、等同替換和改進等,均應包含在本發(fā)明保護范圍之內。

      當前第1頁1 2 
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1