隊列處理方法及裝置與流程
2023-05-08 23:04:21
本發明涉及通信領域,具體而言,涉及一種隊列處理方法及裝置。
背景技術:
隨著轉售業務的不斷擴展,系統處理的數據量劇增,越來越多的服務採用隊列的處理方式,讓高並發產生的數據進入隊列中,有序的處理。
然而,數據的積壓也會導致程序的處理效率受到影響,傳統的隊列方式還會造成與資料庫交互輸入輸出(Input OutputInterface,簡稱IO)壓力過大的問題。
因此,目前亟需提供一種高效且可控的隊列處理機制,來解決IO壓力大,效率低下的問題。
技術實現要素:
本發明的主要目的在於公開了一種呼叫限制方法及裝置,以至少解決相關技術中隊列方式還會造成與資料庫交互輸入輸出IO壓力過大的問題。
根據本發明的一個方面,提供了一種隊列處理方法。
根據本發明的隊列處理方法包括:判斷REDIS隊列中當前總數據量;如果所述總數據量大於或等於預定閾值,則等待第一預定時長之後,重新判斷REDIS隊列中的總數據量;如果所述總數據量小於預定閾值,則從資料庫隊列表中提取預定數量的數據,填充到REDIS隊列中。
優選地,從資料庫隊列表中提取數據,填充到REDIS隊列中包括:將資料庫取出的數據,逐條填充到所述REDIS隊列中,其中,將數據標識作為哈希表的鍵,將數據內容json串作為哈希表的值,一起保存到REDIS哈希表中。
優選地,上述方法還包括:在從所述REDIS隊列提取數據時,判斷所述REDIS隊列是否為空;如果所述REDIS隊列為空,則等待第二預定時長之後,再次嘗試提取所述REDIS隊列中的數據;如果所述REDIS隊列不為空,則根據數據標識從哈希表中取出待處理的數據內容。
優選地,根據數據標識從哈希表中取出待處理的數據內容之後,還包括:按照業務需求處理所述數據內容,返回執行從所述REDIS隊列中提取下一條數據的步驟。
根據本發明的另一方面,提供了一種隊列處理裝置。
根據本發明的隊列處理裝置包括:第一判斷模塊,用於判斷REDIS隊列中當前總數據量;第一處理模塊,用於在所述總數據量大於或等於預定閾值時,等待第一預定時長之後,重新判斷REDIS隊列中的總數據量;第二處理模塊,用於在所述總數據量小於預定閾值時,從資料庫隊列表中提取數據,填充到REDIS隊列中。
與現有技術相比,本發明實施例至少具有以下優點:可以控制REDIS內存中的臨時數據量,不會發生大量數據湧入內存導致溢出的情況,同時有效的限制了與資料庫的IO頻率。
附圖說明
圖1是根據本發明實施例的隊列處理方法的流程圖;
圖2是根據本發明優選實施例的提取數據填充到REDIS隊列中的流程圖;
圖3是根據本發明優選實施例的從REDIS隊列中取數據處理的流程圖;
圖4是根據本發明實施例的隊列處理裝置的結構框圖;
圖5是根據本發明優選實施例的隊列處理裝置的結構框圖。
具體實施方式
下面結合說明書附圖對本發明的具體實現方式做一詳細描述。
圖1是根據本發明實施例的隊列處理方法的流程圖。如圖1所示,該隊列處理方法包括:
步驟S101:判斷REDIS隊列中當前總數據量;
步驟S103:如果上述總數據量大於或等於預定閾值,則等待第一預定時長之後,重新判斷REDIS隊列中的總數據量;
步驟S105:如果上述總數據量小於預定閾值,則從資料庫隊列表中提取預定的數據量,填充到REDIS隊列中。
採用圖1所示的方法,當REDIS隊列中當前總數數據量大於或等於預定閾值,則等待第一預定時長之後,之後重新判斷REDIS隊列中的總數據量;當REDIS隊列中當前總數據量小於預定閾值時,從資料庫隊列表中提取預定數量的數據,填充到REDIS隊列中。可以控制REDIS內存中的臨時數據量,不會發生大量數據湧入內存導致溢出的情況,同時有效的限制了與資料庫的IO頻率。
其中,上述的預定閾值以及預定數量均為可以根據實際情況動態設置的值,兩者共同作用可以控制REDIS內存中的臨時數據量,不會發生大量數據湧入內存導致溢出的情況,同時有效的限制了與資料庫的IO頻率。此外,可以根據所處理的數據量和要求的效率,按需調整處理進程數量。
優選地,從資料庫隊列表中提取數據,填充到REDIS隊列中可以進一步包括:將資料庫取出的數據,逐條填充到上述REDIS隊列中,其中,將數據標識作為哈希表的鍵,將數據內容json串作為哈希表的值,一起保存到REDIS哈希表中。
優選地,上述隊列處理方法還可以包括:在從上述REDIS隊列提取數據時,判斷上述REDIS隊列是否為空;如果上述REDIS隊列為空,則等待第二預定時長之後,再次嘗試提取上述REDIS隊列中的數據;如果上述REDIS隊列不為空,則根據數據標識從哈希表中取出待處理的數據內容。
在根據數據標識從哈希表中取出待處理的數據內容之後,還可以包括以下處理:按照業務需求處理上述數據內容,返回執行從上述REDIS隊列中提取下一條數據的步驟。
以下結合圖2和圖3進一步描述上述優選實施方式。
圖2是根據本發明優選實施例的提取數據填充到REDIS隊列中的流程圖。如圖2所示,主要包括以下步驟:
步驟S201:判斷REDIS隊列中的當前總數據量;如果小於預定閾值,執行步驟S203,否則,執行步驟S207。
步驟S203:從資料庫對列表中提取預定數量的數據。
步驟S205:將資料庫取出的數據,逐條錄入REDIS隊列中。其中,數據ID保存到REDIS隊列中;數據ID作為哈希表的鍵,數據內容json串作為哈希表的值,保存到REDIS哈希表中。此批數據處理完成後,返回執行步驟S201。
步驟S207:等待1秒鐘,然後返回執行步驟S201。
圖3是根據本發明優選實施例的從REDIS隊列中取數據處理的流程圖。如圖3所示,主要包括以下步驟:
步驟S301:提取REDIS隊列中的數據(逐條處理)
步驟S303:判斷該REDIS隊列中的數據是否為空,如果是,執行步驟S305,否則,返回執行步驟S309。
步驟S305:如隊列中有數據ID取出,根據隊列ID,從哈希表中取出待處理的數據內容。
步驟S307:按照業務需求處理取出的數據,完成後返回執行步驟S301。
步驟S309:如隊列中無數據,進程等待1秒,返回執行步驟S301,即再次嘗試讀取REDIS隊列數據。
圖4是根據本發明實施例的隊列處理裝置的結構框圖。如圖4所示,該隊列處理裝置包括:第一判斷模塊40,用於判斷REDIS隊列中當前總數據量;第一處理模塊42,用於在上述總數據量大於或等於預定閾值時,等待第一預定時長之後,重新判斷REDIS隊列中的總數據量;第二處理模塊44,用於在上述總數據量小於預定閾值時,從資料庫隊列表中提取數據,填充到REDIS隊列中。
當REDIS隊列中當前總數數據量大於或等於預定閾值,則第一處理模塊42等待第一預定時長之後,之後重新判斷REDIS隊列中的總數據量;當REDIS隊列中當前總數據量小於預定閾值時,第二處理模塊44從資料庫隊列表中提取預定數量的數據,填充到REDIS隊列中。採用該裝置可以控制REDIS內存中的臨時數據量,不會發生大量數據湧入內存導致溢出的情況,同時有效的限制了與資料庫的IO頻率。
優選地,如圖5所示,上述第二處理模塊44可以進一步包括:填充單元440,用於將資料庫取出的數據,逐條填充到上述REDIS隊列中,其中,將數據標識作為哈希表的鍵,將數據內容json串作為哈希表的值,一起保存到REDIS哈希表中。
優選地,如圖5所示,上述裝置還可以包括:第二判斷模塊46,用於在從上述REDIS隊列提取數據時,判斷上述REDIS隊列是否為空;第一提取模塊48,用於在上述REDIS隊列為空時,等待第二預定時長之後,再次嘗試提取上述REDIS隊列中的數據;第二提取模塊50,用於在上述REDIS隊列不為空時,根據數據標識從哈希表中取出待處理的數據內容。
優選地,如圖5所示,上述裝置還可以包括:第三處理模塊52,用於按照業務需求處理上述數據內容,返回執行從上述REDIS隊列中提取下一條數據的步驟。
需要說明的是,上述隊列處理裝置中各個模塊,各個單元相互結合實施的隊列處理流程可以參見圖1至圖3的描述,此處不再贅述。
綜上所述,藉助本發明提供的上述實施例,一方面可以控制REDIS內存中的臨時數據量,不會發生大量數據湧入內存導致溢出的情況,同時有效的限制了與資料庫的IO頻率,保證資料庫運行穩定;另一方面,可以按需調配處理進程的數量,使得整個隊列程序穩定高效,並且自由可控。
以上公開的僅為本發明的幾個具體實施例,但是,本發明並非局限於此,任何本領域的技術人員能思之的變化都應落入本發明的保護範圍。