欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)處理方法和系統(tǒng)的制作方法

文檔序號:6541860閱讀:119來源:國知局
一種數(shù)據(jù)處理方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)處理方法和系統(tǒng),包括:數(shù)據(jù)寫入階段:接收客戶端發(fā)送來的數(shù)據(jù)信息;將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫;將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存;數(shù)據(jù)處理階段:從所述Redis緩存獲取所述待處理數(shù)據(jù)并進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列;從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將其持久化到所述數(shù)據(jù)庫。本發(fā)明采用Redis緩存保存待處理數(shù)據(jù),實現(xiàn)了Redis緩存中的待處理數(shù)據(jù)的并發(fā)搶占和處理,處理后的結(jié)果數(shù)據(jù)通過消息隊列實現(xiàn)了串行化的方式持久化到數(shù)據(jù)庫中。本發(fā)明增強了數(shù)據(jù)的并發(fā)性處理,給客戶帶來良好的體驗,避免了高并發(fā)情況下給數(shù)據(jù)庫帶來的瓶頸問題,避免數(shù)據(jù)庫死鎖的問題,確保了數(shù)據(jù)的一致性和完整性。
【專利說明】一種數(shù)據(jù)處理方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,特別涉及一種高并發(fā)性能的數(shù)據(jù)處理方法和系統(tǒng)?!颈尘凹夹g(shù)】
[0002]售后服務(wù)是商業(yè)行為中非常重要的環(huán)節(jié)。無論是傳統(tǒng)零售商,還是電商企業(yè),都必須建立一套完善的售后服務(wù)體系,才能保障銷售產(chǎn)品的品質(zhì)和客戶的合法權(quán)益,并且售后服務(wù)質(zhì)量的好壞還直接影響到客戶的購物體驗。
[0003]對于電商企業(yè)來講,客戶在電商網(wǎng)站購買商品,收貨后如果發(fā)現(xiàn)存在質(zhì)量、錯誤購買等問題,可以直接在該電商網(wǎng)站提交相關(guān)的售后服務(wù)申請,售后服務(wù)申請數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到該電商的售后服務(wù)系統(tǒng)中。電商網(wǎng)站的售后服務(wù)專員直接在售后服務(wù)系統(tǒng)中審核并處理該售后服務(wù)申請數(shù)據(jù)。
[0004]在目前的電商企業(yè)中,由于售后服務(wù)專員的考核指標主要通過工作量進行衡量,進而為了能夠提高其自身的考核指標,售后服務(wù)專員會在售后服務(wù)系統(tǒng)中爭搶售后服務(wù)申請數(shù)據(jù)進行審核和處理。在售后服務(wù)系統(tǒng)中,售后服務(wù)申請數(shù)據(jù)的領(lǐng)取屬于一種搶占模式(類似12306網(wǎng)站的搶票模式),這就要求售后服務(wù)系統(tǒng)的領(lǐng)取環(huán)節(jié)必須支持高并發(fā)處理。
[0005]在現(xiàn)有技術(shù)中,對于OLTP (On-Line Transaction Processing,聯(lián)機事務(wù)處理系統(tǒng),也稱為面向交易的處理系統(tǒng))類應(yīng)用系統(tǒng),通常都采用全流程實時數(shù)據(jù)庫交互的模式進行數(shù)據(jù)處理,如圖1所示,其交互過程包括如下步驟:
[0006]第I步、客戶端向Web服務(wù)端發(fā)起請求,例如售后服務(wù)申請單領(lǐng)取請求;
[0007]第2步、Web服務(wù)端接收到客戶端發(fā)起的請求,并和數(shù)據(jù)庫建立連接,向數(shù)據(jù)庫發(fā)起數(shù)據(jù)庫更新事務(wù)請求;
[0008]第3步、數(shù)據(jù)庫接收到數(shù)據(jù)庫更新事務(wù)請求后,執(zhí)行事務(wù)內(nèi)的更新動作以更新對應(yīng)的數(shù)據(jù)記錄,比如售后服務(wù)申請單的領(lǐng)取狀態(tài)、領(lǐng)取數(shù)量等,更新成功之后事務(wù)結(jié)束,同時返回給Web服務(wù)端事務(wù)執(zhí)行成功標識;
[0009]第4步、Web服務(wù)端接收到數(shù)據(jù)庫返回的事務(wù)成功標識后,將數(shù)據(jù)處理結(jié)果返回給客戶端,比如售后服務(wù)申請單最終領(lǐng)取成功數(shù)量等信息;
[0010]第5步、客戶端接收到服務(wù)端返回的信息后提示用戶領(lǐng)取成功信息。
[0011]現(xiàn)有技術(shù)中所采用的上述全流程實時數(shù)據(jù)庫交互模式的缺陷表現(xiàn)在如下幾個方面:
[0012]I)因為全流程實時和數(shù)據(jù)庫交互,進而對數(shù)據(jù)庫形成強依賴。數(shù)據(jù)庫的事務(wù)并發(fā)性能(TPS)有限,因此可導(dǎo)致OLTP類應(yīng)用系統(tǒng)的并發(fā)性能存在瓶頸風(fēng)險。而實踐也表明無論如何進行查詢SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)、數(shù)據(jù)庫配置等優(yōu)化,都很難滿足上述搶占式應(yīng)用場景的高并發(fā)需求;
[0013]2)在高并發(fā)的應(yīng)用場景下,現(xiàn)有技術(shù)方案容易發(fā)生數(shù)據(jù)庫死鎖,如果死鎖處理不好的話容易導(dǎo)致數(shù)據(jù)庫崩潰,進而導(dǎo)致系統(tǒng)無法使用等嚴重后果;
[0014]3 )并發(fā)性能差,用戶體驗不好,往往在客戶端發(fā)起領(lǐng)取請求后,要數(shù)秒之后才能返 回結(jié)果。

【發(fā)明內(nèi)容】

[0015]有鑒于此,本發(fā)明提供一種高并發(fā)數(shù)據(jù)處理方法和系統(tǒng),以適用于解決系統(tǒng)中類似搶占模式的高并發(fā)應(yīng)用。
[0016]本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0017]一種數(shù)據(jù)處理方法,包括數(shù)據(jù)寫入階段和數(shù)據(jù)處理階段,其中:
[0018]所述數(shù)據(jù)寫入階段包括:
[0019]接收客戶端發(fā)送來的數(shù)據(jù)信息;
[0020]創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫;
[0021]將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,之后提交數(shù)據(jù)庫事務(wù);
[0022]所述數(shù)據(jù)處理階段包括:
[0023]從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列;
[0024]監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫;
[0025]刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0026]進一步,在所述數(shù)據(jù)寫入階段中:
[0027]若所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),并斷開所述數(shù)據(jù)庫連接。
[0028]進一步,在所述數(shù)據(jù)處理階段中:
[0029]若所述結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),且不刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0030]進一步,所述Redis緩存中具有存儲隊列List,以及與所述List對應(yīng)的已完成隊列 Complete List ;
[0031]在所述數(shù)據(jù)寫入階段中:
[0032]將所述待處理數(shù)據(jù)寫入Redis緩存時,是將所述待處理數(shù)據(jù)寫入所述存儲隊列List 中;
[0033]在所述數(shù)據(jù)處理階段中:
[0034]從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理時,是從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中。
[0035]進一步,從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中的過程中,采用setnx原子操作對所述待處理數(shù)據(jù)進行加鎖處理。
[0036]進一步,在所述數(shù)據(jù)寫入階段中,所述將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫與所述將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,在同一個事務(wù)邊界中完成。
[0037]進一步,所述數(shù)據(jù)信息為售后服務(wù)申請單數(shù)據(jù)。
[0038]一種數(shù)據(jù)處理系統(tǒng),包括:[0039]數(shù)據(jù)庫,用于進行所述數(shù)據(jù)信息和處理后的結(jié)果數(shù)據(jù)的存儲;
[0040]Redis緩存,用于保存所述數(shù)據(jù)信息中的待處理數(shù)據(jù);
[0041]第一服務(wù)模塊,用于接收客戶端發(fā)送來的數(shù)據(jù)信息,創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到所述數(shù)據(jù)庫,將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入所述Redis緩存,之后提交數(shù)據(jù)庫事務(wù);
[0042]數(shù)據(jù)處理模塊,用于從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列;
[0043]第二服務(wù)模塊,用于監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫,之后刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0044]進一步,所述Redis緩存中具有存儲隊列List,以及與所述List對應(yīng)的已完成隊列 Complete List ;
[0045]所述第一服務(wù)模塊將所述待處理數(shù)據(jù)寫入Redis緩存時,是將所述待處理數(shù)據(jù)寫入所述存儲隊列List中;
[0046]所述數(shù)據(jù)處理模塊從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理時,是從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中。
[0047]進一步,所述數(shù)據(jù)信息為售后服務(wù)申請單數(shù)據(jù)。
[0048]從上述方案可以看出,本發(fā)明的數(shù)據(jù)處理方法和系統(tǒng),采用Redis緩存保存數(shù)據(jù)信息中的待處理數(shù)據(jù),利用Redis緩存對高并發(fā)訪問的良好支持,實現(xiàn)了 Redis緩存中的待處理數(shù)據(jù)的并發(fā)搶占和處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列,并通過消息隊列以串行化的方式持久化到數(shù)據(jù)庫中,在保證數(shù)據(jù)一致性和完整性的情況下實現(xiàn)了結(jié)果數(shù)據(jù)在數(shù)據(jù)庫中的存儲。對于整個的數(shù)據(jù)處理過程來說,一方面增強了數(shù)據(jù)的并發(fā)性處理,能夠較快的完成數(shù)據(jù)的處理,不需要客戶較長時間的等待,給客戶帶來良好的體驗,另一方面,也避免了高并發(fā)情況下給數(shù)據(jù)庫帶來的瓶頸問題,避免數(shù)據(jù)庫死鎖的問題,也確保了數(shù)據(jù)的一致性和完整性。
【專利附圖】

【附圖說明】
[0049]圖1為現(xiàn)有的全流程實時數(shù)據(jù)庫交互模式進行數(shù)據(jù)處理的示意圖;
[0050]圖2為本發(fā)明的數(shù)據(jù)處理方法的流程示意圖;
[0051]圖3為本發(fā)明的數(shù)據(jù)處理方法的實施例意圖;
[0052]圖4為本發(fā)明中Redis緩存中的數(shù)據(jù)存儲結(jié)構(gòu)示意圖;
[0053]圖5為本發(fā)明的數(shù)據(jù)處理系統(tǒng)的實施例結(jié)構(gòu)示意圖。
【具體實施方式】
[0054]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明作進一步詳細說明。
[0055]如圖2所示,本發(fā)明提供的數(shù)據(jù)處理方法包括數(shù)據(jù)寫入階段和數(shù)據(jù)處理階段,其中:[0056]所述數(shù)據(jù)寫入階段包括:
[0057]步驟1、接收客戶端發(fā)送來的數(shù)據(jù)信息;
[0058]步驟2、創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫;
[0059]步驟3、將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,之后提交數(shù)據(jù)庫事務(wù);
[0060]所述數(shù)據(jù)處理階段包括:
[0061]步驟4、從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列(MQ);
[0062]步驟5、監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫;
[0063]步驟6、刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0064]在所述數(shù)據(jù)寫入階段中,若步驟2中所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),并斷開所述數(shù)據(jù)庫連接。此處的數(shù)據(jù)庫回滾指的是該處整個數(shù)據(jù)持久化事務(wù)回滾,回滾的事務(wù)不會有任何數(shù)據(jù)持久化到數(shù)據(jù)庫。
[0065]在所述數(shù)據(jù)寫入階段中,步驟2的將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫與步驟3的將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,是在同一個事務(wù)邊界中完成的,進而保證存儲到數(shù)據(jù)庫中和存儲到Redis緩存中的數(shù)據(jù)保持一致。
[0066]在所述數(shù)據(jù)處理階段中,若步驟5中所述結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),且不刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0067]本發(fā)明中,所采用的Redis是一個key-value存儲系統(tǒng),支持多種存儲類型,其中包括List (存儲隊列)類型,并且支持多種操作,例如push/pop、add/remove以及取交集并集和差集等,這些操作都是原子性的。并且,在此基礎(chǔ)上,redis支持了各種不同方式的排序。Redis的數(shù)據(jù)都是緩存在內(nèi)存中的。關(guān)于Redis,為本領(lǐng)域已有技術(shù),不在此贅述。
[0068]本發(fā)明所述方法的實施例中,Redis緩存中具有至少I個List(存儲隊列),以及與所述List對應(yīng)的Complete List (已完成隊列)。步驟2中,將所述待處理數(shù)據(jù)寫入Redis緩存時,是將所述待處理數(shù)據(jù)寫入所述存儲隊列List中;步驟4中,從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理時,是從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中。從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中的過程中,采用setnx原子操作對所述待處理數(shù)據(jù)進行加鎖處理,進而保證高并發(fā)下的線程安全。
[0069]本發(fā)明公開的數(shù)據(jù)處理方法,適用于高并發(fā)的數(shù)據(jù)處理,例如搶占模式的售后服務(wù)申請數(shù)據(jù)的處理,進而作為一個具體實施例,本發(fā)明的上述數(shù)據(jù)處理方法中,所述待處理數(shù)據(jù)為售后服務(wù)申請單數(shù)據(jù)。
[0070]以下以電商的網(wǎng)上售后服務(wù)申請單的數(shù)據(jù)處理過程為例,并結(jié)合圖3對本發(fā)明的數(shù)據(jù)處理方法進行具體說明,該實施例包括以下過程。
[0071]步驟a、電商接收客戶端發(fā)送來的售后服務(wù)申請單數(shù)據(jù),之后執(zhí)行步驟b。
[0072]在本步驟a之前,客戶從電商購買所需要的商品,當發(fā)現(xiàn)其所購買的商品出現(xiàn)質(zhì)量問題或者需要相關(guān)的售后服務(wù)時,通過客戶端向電商發(fā)送售后服務(wù)申請單,以申請相應(yīng)的售后服務(wù)。其中,客戶端例如客戶電腦,或者客戶電腦中所安裝的相應(yīng)軟件,或者客戶電腦所登錄的電商網(wǎng)頁,或者客戶移動終端所安裝的相應(yīng)軟件,或者客戶移動終端所登陸的點上網(wǎng)頁等。
[0073]步驟b、創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫,之后執(zhí)行步驟C。
[0074]其中,數(shù)據(jù)庫為事先已經(jīng)創(chuàng)建好的數(shù)據(jù)庫,該數(shù)據(jù)庫用于存儲售后服務(wù)申請單數(shù)據(jù)以及與所述售后服務(wù)申請單數(shù)據(jù)相對應(yīng)的經(jīng)過電商客服處理后的售后服務(wù)數(shù)據(jù)等。本步驟b中,將售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫中,目的是為了在電商網(wǎng)站完成服務(wù)申請單數(shù)據(jù)的存儲。
[0075]步驟C、判斷將售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫是否成功,如果成功則執(zhí)行步驟d,否則執(zhí)行步驟e。
[0076]在網(wǎng)站運營的過程中,可能因為所存在的各種問題,例如傳輸數(shù)據(jù)丟失,而造成的數(shù)據(jù)持久化失敗的可能,設(shè)置本步驟c的目的是當出現(xiàn)失敗的情況時,能夠進行相應(yīng)的處理,以防止無法完成售后服務(wù)申請單的處理的可能。
[0077]步驟d、將所述售后服務(wù)申請單數(shù)據(jù)中的待處理數(shù)據(jù)寫入Redis緩存,之后提交數(shù)據(jù)庫事務(wù),之后執(zhí)行步驟f。
[0078]本步驟d中,售后服務(wù)申請單數(shù)據(jù)中的待處理數(shù)據(jù)是指,進行該售后服務(wù)申請的相應(yīng)處理是所需要用到的數(shù)據(jù)。對于售后服務(wù)申請單來說,其中包含了大量的信息,這些信息在數(shù)據(jù)庫中的存儲例如分為多個字段進行存儲,字段內(nèi)容例如相關(guān)的商品信息、提交日期信息、客戶在申請單中填寫的描述信息、用于標識售后服務(wù)申請的處理進展的信息等。在電商客服針對該售后服務(wù)申請進行相應(yīng)的處理時,并不需要該售后服務(wù)申請單數(shù)據(jù)中的所有信息,僅需要其中一部分信息即可完成相應(yīng)的售后服務(wù)流程,因此不必要將所有的售后服務(wù)申請單數(shù)據(jù)全部寫入Redis緩存,進而節(jié)省了售后服務(wù)申請單數(shù)據(jù)所占用的Redis緩存空間,能夠使Redis緩存同時存儲更多的其他售后服務(wù)申請單的相關(guān)數(shù)據(jù)。
[0079]步驟d中,在所述的提交數(shù)據(jù)庫事務(wù)中的事務(wù)是指數(shù)據(jù)寫入的事務(wù),本領(lǐng)域中,凡是持久化到數(shù)據(jù)庫的業(yè)務(wù)邏輯都需要依賴于數(shù)據(jù)庫自身的事務(wù)來確保數(shù)據(jù)的一致性和完整性,數(shù)據(jù)寫入事務(wù)提交之后,客戶端所提交的數(shù)據(jù)才真正的持久化到了數(shù)據(jù)庫中。
[0080]這里需要強調(diào)的是,步驟b到步驟d的過程中,將售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫以及將所述售后服務(wù)申請單數(shù)據(jù)中的待處理數(shù)據(jù)寫入Redis緩存,這兩個過程是在同一個事務(wù)邊界中完成的,進而確保了數(shù)據(jù)庫和Redis緩存中的數(shù)據(jù)的一致性。
[0081]步驟e、回滾所述數(shù)據(jù)庫事務(wù),并斷開所述數(shù)據(jù)庫連接,并向客戶端發(fā)出售后服務(wù)申請單數(shù)據(jù)存儲失敗提示信息。
[0082]經(jīng)過本步驟e,可使得數(shù)據(jù)庫返回到其創(chuàng)建連接之前的狀態(tài),防止售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫失敗而可能對數(shù)據(jù)庫存儲信息造成的破壞。向客戶端發(fā)出售后服務(wù)申請單數(shù)據(jù)存儲失敗提示信息,能夠使得客戶得知其售后服務(wù)申請單上傳失敗,以重新進行上傳。
[0083]這里需要注意的是數(shù)據(jù)的寫入順序非常關(guān)鍵,必須先確保售后服務(wù)申請單數(shù)據(jù)持久化到數(shù)據(jù)庫成功,然后再將待處理數(shù)據(jù)寫入到Redis緩存,這樣才能保證數(shù)據(jù)庫和Redis緩存中數(shù)據(jù)的一致性。如果順序反過來,就可能出現(xiàn)Redis緩存寫成功,但持久化過程中出現(xiàn)異常導(dǎo)致數(shù)據(jù)庫事務(wù)回滾的問題,這樣的結(jié)果就是數(shù)據(jù)庫中沒有該售后服務(wù)申請單數(shù)據(jù),而Redis緩存中已經(jīng)存有該售后服務(wù)申請單的待處理數(shù)據(jù)了,因為Redis緩存不會和數(shù)據(jù)庫事務(wù)一起回滾。
[0084]經(jīng)過上述步驟a至步驟e的過程,便完成了售后服務(wù)申請單數(shù)據(jù)的寫入。
[0085]步驟f、從Redis緩存獲取待處理數(shù)據(jù),并對待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列(MQ),之后執(zhí)行步驟g。
[0086]本步驟f主要通過電商的售后服務(wù)專員來完成,售后服務(wù)專員通過電商網(wǎng)站的售后服務(wù)系統(tǒng)獲取Redis緩存中的待處理數(shù)據(jù),并對待處理數(shù)據(jù)進行審核和處理。當大量的售后服務(wù)申請單數(shù)據(jù)經(jīng)過步驟a至步驟e進入電商網(wǎng)站的數(shù)據(jù)庫和Redis緩存中后,售后服務(wù)專員僅獲取Redis緩存中的待處理數(shù)據(jù),不從數(shù)據(jù)庫中爭搶售后服務(wù)申請單數(shù)據(jù),可避免由于數(shù)據(jù)庫并發(fā)性能有限的瓶頸;另外,Redis緩存的讀取/寫入速度要比數(shù)據(jù)庫的讀取/寫入速度快得多,在同時處理大量售后服務(wù)申請單數(shù)據(jù)的情況下,因為僅從Redis緩存中爭搶售后服務(wù)申請單數(shù)據(jù),與傳統(tǒng)的僅從數(shù)據(jù)庫進行搶單相比,本發(fā)明的方法也極大的加快了讀取/寫入速度;同時,由于是從Redis緩存獲取待處理數(shù)據(jù),所以本發(fā)明的方法不易發(fā)生數(shù)據(jù)庫死鎖。
[0087]本發(fā)明實施例中,如圖4所示,待處理數(shù)據(jù)在Redis緩存中采用List (存儲隊列)進行存儲,List支持排序,并且支持單獨操作List中的某個具體數(shù)據(jù);在Redis緩存中,與List對應(yīng),還具有Complete List(已完成隊列)。在步驟d中,將待處理數(shù)據(jù)寫入Redis緩存時,根據(jù)具體的應(yīng)用邏輯(服務(wù)單領(lǐng)取時需要處理的邏輯,例如更新服務(wù)單狀態(tài)等)定義不同的List,并將待處理數(shù)據(jù)寫入到對應(yīng)的List中。在步驟f中,從Redis緩存獲取待處理數(shù)據(jù)(data),并對待處理數(shù)據(jù)進行處理時,是直接從Redis緩存中對應(yīng)的List中Get(獲取)對應(yīng)的Value (值),在內(nèi)存中進行邏輯處理后將該Value轉(zhuǎn)移到對應(yīng)的Complete List中,這樣可以避免在高并發(fā)下的重復(fù)處理。上述中,應(yīng)用邏輯指的是具體的業(yè)務(wù)邏輯,可以根據(jù)不同的業(yè)務(wù)邏輯定義不同的數(shù)據(jù)結(jié)構(gòu),比如在售后服務(wù)單的實施例中,因為售后服務(wù)單信息寫入到數(shù)據(jù)庫中之后,處理數(shù)據(jù)的業(yè)務(wù)邏輯是服務(wù)單領(lǐng)取,服務(wù)單領(lǐng)取業(yè)務(wù)要求先進先出,需要按照時間順序領(lǐng)取,進而需采用隊列(List)形式。關(guān)于Redis緩存以及其中的List以及相關(guān)操作等內(nèi)容為已公開技術(shù),本領(lǐng)域技術(shù)人員可通過相關(guān)技術(shù)文檔獲得,此處不再贅述。
[0088]此外,從Redis緩存中獲取待處理數(shù)據(jù)并將對應(yīng)數(shù)據(jù)移動到Complete List的整個處理過程,利用Redis中的setnx原子操作加鎖,進而保證高并發(fā)下的線程安全。
[0089]步驟g、監(jiān)聽消息隊列,并從消息隊列中獲取結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫,之后執(zhí)行步驟h。
[0090]本發(fā)明中,所述消息隊列為基于JMS (Java消息服務(wù))的消息總線,進行異步處理的一種實現(xiàn)方式。本發(fā)明中,經(jīng)過步驟f將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列,在步驟g中,利用消息隊列,實現(xiàn)了數(shù)據(jù)庫更新的異步操作,使得Redis緩存中高并發(fā)情況下進行數(shù)據(jù)處理獲得的結(jié)果數(shù)據(jù),能夠以串行化的方式持久化到數(shù)據(jù)庫中,一方面確保了數(shù)據(jù)的一致性和完整性,另一方面避免了數(shù)據(jù)庫死鎖的問題,也可回避數(shù)據(jù)庫并發(fā)性能差,用戶體驗不好的問題。
[0091]步驟h、判斷結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫是否成功,如果成功則執(zhí)行步驟i,否則執(zhí)行j。[0092]步驟1、刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0093]步驟j、回滾所述數(shù)據(jù)庫事務(wù),且不刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
[0094]從上述過程可以看出,本發(fā)明實施例利用Redis緩存保存售后服務(wù)申請單數(shù)據(jù)中的待處理數(shù)據(jù),利用Redis緩存對高并發(fā)訪問的良好支持,實現(xiàn)Redis緩存中的待處理數(shù)據(jù)的并發(fā)搶占和處理,之后將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列,并通過消息隊列以串行化的方式持久化到數(shù)據(jù)庫中,在保證數(shù)據(jù)一致性和完整性的情況下實現(xiàn)了結(jié)果數(shù)據(jù)在數(shù)據(jù)庫中的存儲。在整個的數(shù)據(jù)處理過程來說,一方面增強了數(shù)據(jù)的并發(fā)性處理,能夠較快的完成數(shù)據(jù)的處理,不需要客戶較長時間的等待,給客戶帶來良好的體驗,另一方面,也避免了高并發(fā)情況下給數(shù)據(jù)庫帶來的瓶頸問題,避免數(shù)據(jù)庫死鎖的問題,也確保了數(shù)據(jù)的一致性和完整性。
[0095]基于上述數(shù)據(jù)處理方法,本發(fā)明同時提供了一種數(shù)據(jù)處理系統(tǒng),如圖5所示,其包括,數(shù)據(jù)庫1、Redis緩存2、第一服務(wù)模塊3、數(shù)據(jù)處理模塊4和第二服務(wù)模塊5。其中,數(shù)據(jù)庫1,用于進行所述數(shù)據(jù)信息和處理后的結(jié)果數(shù)據(jù)的存儲。Redis緩存2,用于保存所述數(shù)據(jù)信息中的待處理數(shù)據(jù)。第一服務(wù)模塊3,用于接收客戶端發(fā)送來的數(shù)據(jù)信息,創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到所述數(shù)據(jù)庫1,將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入所述Redis緩存2,之后提交數(shù)據(jù)庫事務(wù)。數(shù)據(jù)處理模塊4,用于從所述Redis緩存2獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列。第二服務(wù)模塊5,用于監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫1,之后刪除所述Redis緩存2中的所述待處理數(shù)據(jù)。
[0096]本發(fā)明提供的上述數(shù)據(jù)處理方法和系統(tǒng),采用Redis緩存保存數(shù)據(jù)信息中的待處理數(shù)據(jù),利用Redis緩存對高并發(fā)訪問的良好支持,實現(xiàn)了 Redis緩存中的待處理數(shù)據(jù)的并發(fā)搶占和處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列,并通過消息隊列以串行化的方式持久化到數(shù)據(jù)庫中,在保證數(shù)據(jù)一致性和完整性的情況下實現(xiàn)了結(jié)果數(shù)據(jù)在數(shù)據(jù)庫中的存儲。對于整個的數(shù)據(jù)處理過程來說,一方面增強了數(shù)據(jù)的并發(fā)性處理,能夠較快的完成數(shù)據(jù)的處理,不需要客戶較長時間的等待,給客戶帶來良好的體驗,另一方面,也避免了高并發(fā)情況下給數(shù)據(jù)庫帶來的瓶頸問題,避免數(shù)據(jù)庫死鎖的問題,也確保了數(shù)據(jù)的一致性和完整性。
[0097]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)處理方法,包括數(shù)據(jù)寫入階段和數(shù)據(jù)處理階段,其中: 所述數(shù)據(jù)寫入階段包括: 接收客戶端發(fā)送來的數(shù)據(jù)信息; 創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫; 將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,之后提交數(shù)據(jù)庫事務(wù); 所述數(shù)據(jù)處理階段包括: 從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列; 監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫; 刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,在所述數(shù)據(jù)寫入階段中: 若所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),并斷開所述數(shù)據(jù)庫連接。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,在所述數(shù)據(jù)處理階段中: 若所述結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫失敗,則回滾所述數(shù)據(jù)庫事務(wù),且不刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于: 所述Redis緩存中具有存儲隊列List,以及與所述List對應(yīng)的已完成隊列CompleteList ; 在所述數(shù)據(jù)寫入階段中: 將所述待處理數(shù)據(jù)寫入Redis緩存時,是將所述待處理數(shù)據(jù)寫入所述存儲隊列List中; 在所述數(shù)據(jù)處理階段中: 從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理時,是從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List 相對應(yīng)的 Complete List 中。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理方法,其特征在于: 從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中的過程中,采用setnx原子操作對所述待處理數(shù)據(jù)進行加鎖處理。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于:在所述數(shù)據(jù)寫入階段中,所述將所述數(shù)據(jù)信息持久化到數(shù)據(jù)庫與所述將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入Redis緩存,在同一個事務(wù)邊界中完成。
7.根據(jù)權(quán)利要求1至6任一項所述的數(shù)據(jù)處理方法,其特征在于:所述數(shù)據(jù)信息為售后服務(wù)申請單數(shù)據(jù)。
8.一種數(shù)據(jù)處理系統(tǒng),其特征在于,包括: 數(shù)據(jù)庫,用于進行所述數(shù)據(jù)信息和處理后的結(jié)果數(shù)據(jù)的存儲; Redis緩存,用于保存所述數(shù)據(jù)信息中的待處理數(shù)據(jù);第一服務(wù)模塊,用于接收客戶端發(fā)送來的數(shù)據(jù)信息,創(chuàng)建數(shù)據(jù)庫連接,并開啟數(shù)據(jù)庫事務(wù),將所述數(shù)據(jù)信息持久化到所述數(shù)據(jù)庫,將所述數(shù)據(jù)信息中的待處理數(shù)據(jù)寫入所述Redis緩存,之后提交數(shù)據(jù)庫事務(wù); 數(shù)據(jù)處理模塊,用于從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理,將處理后的結(jié)果數(shù)據(jù)發(fā)送到消息隊列; 第二服務(wù)模塊,用于監(jiān)聽所述消息隊列,并從所述消息隊列中獲取所述結(jié)果數(shù)據(jù),并將所接收的結(jié)果數(shù)據(jù)持久化到所述數(shù)據(jù)庫,之后刪除所述Redis緩存中的所述待處理數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理系統(tǒng),其特征在于: 所述Redis緩存中具有存儲隊列List,以及與所述List對應(yīng)的已完成隊列CompleteList ; 所述第一服務(wù)模塊將所述待處理數(shù)據(jù)寫入Redis緩存時,是將所述待處理數(shù)據(jù)寫入所述存儲隊列List中; 所述數(shù)據(jù)處理模塊從所述Redis緩存獲取所述待處理數(shù)據(jù),并對所述待處理數(shù)據(jù)進行處理時,是從所述存儲隊列List中取出所述待處理數(shù)據(jù)以進行處理,將處理后的結(jié)果數(shù)據(jù)轉(zhuǎn)存到與所述List相對應(yīng)的Complete List中。
10.根據(jù)權(quán)利要求8或9所述的并發(fā)數(shù)據(jù)處理系統(tǒng),其特征在于:所述數(shù)據(jù)信息為售后服務(wù)申請單數(shù) 據(jù)。
【文檔編號】G06F17/30GK103886079SQ201410115278
【公開日】2014年6月25日 申請日期:2014年3月26日 優(yōu)先權(quán)日:2014年3月26日
【發(fā)明者】者文明 申請人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀貿(mào)易有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
洛宁县| 怀柔区| 乌苏市| 江都市| 东阳市| 芦溪县| 商南县| 运城市| 夹江县| 浦城县| 商水县| 山东省| 措美县| 会昌县| 武威市| 涡阳县| 临安市| 定日县| 洪洞县| 夏邑县| 当阳市| 阿坝| 宜州市| 玉山县| 黎城县| 治多县| 安图县| 库尔勒市| 密山市| 个旧市| 宾川县| 鄱阳县| 平武县| 永胜县| 镇江市| 崇仁县| 卢龙县| 莎车县| 蒲城县| 甘泉县| 东辽县|