本申請涉及通信技術(shù)領(lǐng)域,尤其涉及一種處理紅包的方法及系統(tǒng)。
背景技術(shù):
隨著科學(xué)技術(shù)的不斷發(fā)展,通信技術(shù)也得到了飛速的發(fā)展,電子產(chǎn)品的種類也越來越多,人們也享受到了科技發(fā)展帶來的各種便利。
互聯(lián)網(wǎng)應(yīng)用中處處可見類似搶紅包的應(yīng)用,尤其是在彈幕式視頻直播行業(yè),各種由贈送高價值禮物而觸發(fā)的虛擬貨幣的紅包應(yīng)用已經(jīng)非常普遍。
而在搶紅包應(yīng)用場景中,由于用戶的搶紅包行為存在一定的不可預(yù)測性,在面對高并發(fā)的搶紅包請求場景下會形成搶紅包的高峰期,在搶紅包高峰期時,搶紅包請求難以快速響應(yīng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明了提供了一種處理紅包的方法及系統(tǒng),以解決搶紅包請求難以快速響應(yīng)的技術(shù)問題。
為解決上述技術(shù)問題,本發(fā)明提供了一種處理紅包的方法及系統(tǒng),所述方法應(yīng)用于處理紅包的系統(tǒng),所述系統(tǒng)包括客戶端、紅包服務(wù)器、數(shù)據(jù)庫組,所述數(shù)據(jù)庫組中包含有主數(shù)據(jù)庫和從數(shù)據(jù)庫集合,所述從數(shù)據(jù)庫集合中包含有用于查詢紅包對應(yīng)的貨幣價值的多個查詢數(shù)據(jù)庫;所述方法包括:
所述紅包服務(wù)器接收所述客戶端發(fā)送的搶紅包請求,判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID;
若所述搶紅包請求中攜帶有所述紅包對應(yīng)的身份標(biāo)識ID,所述紅包服務(wù)器隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值;
若有所述紅包對應(yīng)的貨幣價值,所述紅包服務(wù)器從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。
優(yōu)選的,所述判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID之后,所述方法還包括:
若所述搶紅包請求中沒有攜帶所述紅包對應(yīng)的身份標(biāo)識ID,生成貨幣價值為0的紅包返回給所述客戶端。
優(yōu)選的,所述利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值之后,所述方法還包括:
若沒有所述紅包對應(yīng)的貨幣價值,生成貨幣價值為0的紅包返回給所述客戶端。
優(yōu)選的,所述客戶端發(fā)送搶紅包請求之前,所述方法還包括:
所述客戶端發(fā)送用于創(chuàng)建紅包的請求數(shù)據(jù)包;
所述紅包服務(wù)器接收到所述請求數(shù)據(jù)包;
所述紅包服務(wù)器判斷所述請求數(shù)據(jù)包中是否包含有貨幣總價值Vt和紅包分配份數(shù)Cn,其中Cn為正整數(shù)且Cn≥1;
若所述請求數(shù)據(jù)包中包含有所述貨幣總價值Vt和所述紅包分配份數(shù)Cn,所述紅包服務(wù)器將所述貨幣總值Vt隨機(jī)分配成Cn份紅包,每份紅包對應(yīng)有各自的貨幣價值;
所述紅包服務(wù)器為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID。
優(yōu)選的,從數(shù)據(jù)庫集合中還包括有一個用于永久存儲所述Cn份紅包和各自的貨幣價值的存儲數(shù)據(jù)庫。
優(yōu)選的,所述紅包服務(wù)器為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID之后,所述方法還包括:
所述紅包服務(wù)器在多個數(shù)據(jù)庫組中確定出包含有所述主數(shù)據(jù)庫和所述從數(shù)據(jù)庫集合的數(shù)據(jù)庫組,其中,在多個數(shù)據(jù)庫組中,每個數(shù)據(jù)庫組包含有主數(shù)據(jù)庫和從數(shù)據(jù)庫集合;
所述紅包服務(wù)器利用所述主數(shù)據(jù)庫存儲所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值。
優(yōu)選的,所述紅包服務(wù)器利用所述主數(shù)據(jù)庫存儲所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值之后,所述方法還包括:
所述紅包服務(wù)器將所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值同步存儲到所述從數(shù)據(jù)庫集合中。
優(yōu)選的,所述紅包服務(wù)器將所述貨幣總值Vt隨機(jī)分配成Cn份紅包,包括:
以Cn份紅包為標(biāo)準(zhǔn)對所述貨幣總值Vt進(jìn)行分配;或者
以貨幣價值為標(biāo)準(zhǔn)對所述貨幣總值Vt進(jìn)行分配,紅包的份數(shù)Cn隨機(jī)。
本發(fā)明的另一個方面,公開了一種處理紅包的系統(tǒng),所述系統(tǒng)包括:客戶端、紅包服務(wù)器、數(shù)據(jù)庫組,所述數(shù)據(jù)庫組中包含主數(shù)據(jù)庫和從數(shù)據(jù)庫集合,所述從數(shù)據(jù)庫集合中包含有用于查詢紅包對應(yīng)的貨幣價值的多個查詢數(shù)據(jù)庫;
所述客戶端,用于發(fā)送搶紅包請求;
所述紅包服務(wù)器,用于接收到由所述客戶端發(fā)送的搶紅包請求,然后判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID;
所述紅包服務(wù)器,用于若所述搶紅包請求中攜帶有所述紅包對應(yīng)的身份標(biāo)識ID,隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值;
所述紅包服務(wù)器,用于若有所述紅包對應(yīng)的貨幣價值,從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。
優(yōu)選的,所述客戶端,用于發(fā)送用于創(chuàng)建紅包的請求數(shù)據(jù)包;
所述紅包服務(wù)器,用于接收到所述請求數(shù)據(jù)包;判斷所述請求數(shù)據(jù)包中是否包含有貨幣總價值Vt和紅包分配份數(shù)Cn,其中Cn為正整數(shù)且Cn≥1;若所述請求數(shù)據(jù)包中包含有所述貨幣總價值Vt和所述紅包分配份數(shù)Cn,將所述貨幣總值Vt隨機(jī)分配成Cn份紅包,每份紅包對應(yīng)有各自的貨幣價值;為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID。
通過本發(fā)明的一個或者多個技術(shù)方案,本發(fā)明具有以下有益效果或者優(yōu)點(diǎn):
本發(fā)明公開了一種處理紅包的方法及系統(tǒng),當(dāng)所述客戶端發(fā)送搶紅包請求之后,所述紅包服務(wù)器判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID;若是則隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值;若有所述紅包對應(yīng)的貨幣價值,所述紅包服務(wù)器從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。本發(fā)明將數(shù)據(jù)庫組分為主數(shù)據(jù)庫和從數(shù)據(jù)庫集合,采用通過從數(shù)據(jù)庫集合中的查詢數(shù)據(jù)庫來查紅包中是否有剩余紅包,再確定是否要去主數(shù)據(jù)庫中完成相應(yīng)操作,降低了主數(shù)據(jù)庫的壓力,直接提升了搶紅包的響應(yīng)效率。
附圖說明
圖1為本發(fā)明實(shí)施例中的整體框架圖;
圖2為本發(fā)明實(shí)施例中Redis Group的組成圖;
圖3為本發(fā)明實(shí)施例中本發(fā)明的創(chuàng)建紅包的流程圖;
圖4為本發(fā)明實(shí)施例中發(fā)紅包的流程圖。
具體實(shí)施方式
為了使本申請所屬技術(shù)領(lǐng)域中的技術(shù)人員更清楚地理解本申請,下面結(jié)合附圖,通過具體實(shí)施例對本申請技術(shù)方案作詳細(xì)描述。
圖1為本發(fā)明的整體框架圖:
1)Client:客戶端,發(fā)送搶寶箱請求。舉例來說,本發(fā)明具有客戶端1、客戶端2、客戶端3……客戶端n。每個客戶端都可以發(fā)送搶寶箱請求。
2)GateServer Cluster:網(wǎng)關(guān)服務(wù)集群,負(fù)責(zé)client的網(wǎng)絡(luò)接入,隔離、保護(hù)公網(wǎng)和內(nèi)網(wǎng)的數(shù)據(jù)交換。
3)RedpacketServer Cluster:紅包服務(wù)器的集群,負(fù)責(zé)處理創(chuàng)建紅包、搶紅包的網(wǎng)絡(luò)請求。
4)Redis Group:數(shù)據(jù)庫組,負(fù)責(zé)紅包數(shù)據(jù)持久化和搶紅包的結(jié)果處理,根據(jù)紅包身份標(biāo)識ID進(jìn)行分片,每個紅包都有一個唯一的身份標(biāo)識ID。舉例來說,本發(fā)明具有m個數(shù)據(jù)庫組,分別為:數(shù)據(jù)庫組1、數(shù)據(jù)庫組2、數(shù)據(jù)庫組3……數(shù)據(jù)庫組m。
圖2為Redis Group的組成圖:
在圖2中,一個Redis Group(數(shù)據(jù)庫組)由一個Master Redis主數(shù)據(jù)庫和一個從數(shù)據(jù)庫集合組成,所述從數(shù)據(jù)庫集合中包含有用于存儲紅包數(shù)據(jù)的一個存儲數(shù)據(jù)庫和用于查詢紅包對應(yīng)的貨幣價值的多個查詢數(shù)據(jù)庫。
具體來說,在從數(shù)據(jù)庫集合中包含有若干(大于等于2)個Slave Redis從數(shù)據(jù)庫。其中,這若干個從數(shù)據(jù)庫中,可隨機(jī)確定一個從數(shù)據(jù)庫作為存儲數(shù)據(jù)庫,其余的從數(shù)據(jù)庫作為查詢數(shù)據(jù)庫。例如圖2中,x個從數(shù)據(jù)庫中的第一從數(shù)據(jù)庫作為存儲數(shù)據(jù)庫,而其余的第2從數(shù)據(jù)庫至第x個從數(shù)據(jù)庫作為查詢數(shù)據(jù)庫。
5)Master Redis:主數(shù)據(jù)庫,負(fù)責(zé)創(chuàng)建紅包、搶紅包數(shù)據(jù)的寫入操作。主數(shù)據(jù)庫和從數(shù)據(jù)庫集合存在同步機(jī)制,Mater Redis的數(shù)據(jù)發(fā)生變化,會自動同步到所有的Slave Redis從數(shù)據(jù)庫。
6)Slave Redis 1:從數(shù)據(jù)庫中的第一從數(shù)據(jù)庫,也作為存儲數(shù)據(jù)庫,只負(fù)責(zé)紅包數(shù)據(jù)的持久化。持久化的含義即是:第一從數(shù)據(jù)庫會永久存儲創(chuàng)建的所有紅包、所有紅包各自的身份標(biāo)識ID、所有紅包各自的貨幣價值等等。這些數(shù)據(jù)不會隨著服務(wù)器的重啟、故障等等原因而丟失。
7)Slave Redis 2至Slave Redis x:從數(shù)據(jù)庫中的第2從數(shù)據(jù)庫至第x個從數(shù)據(jù)庫,作為查詢數(shù)據(jù)庫。這些從數(shù)據(jù)庫只負(fù)責(zé)處理紅包數(shù)據(jù)的查詢操作,Redis在當(dāng)下比較主流的服務(wù)器上的QPS(Query Per Second,每秒查詢率)可高達(dá)5~8W。
綜上,本發(fā)明公開的一種處理紅包的系統(tǒng),包括:客戶端集群、紅包服務(wù)器集群、網(wǎng)關(guān)服務(wù)集群、多個數(shù)據(jù)庫組。
客戶端和紅包服務(wù)器的信息交互時通過網(wǎng)關(guān)服務(wù)集群進(jìn)行轉(zhuǎn)發(fā)的。
每個數(shù)據(jù)庫組中包含一個主數(shù)據(jù)庫和一個從數(shù)據(jù)庫集合,所述從數(shù)據(jù)庫集合中包含有用于查詢紅包對應(yīng)的貨幣價值的多個查詢數(shù)據(jù)庫。
下面先介紹創(chuàng)建紅包的具體實(shí)施過程,當(dāng)然,本發(fā)明是以一個客戶端為例進(jìn)行介紹,其他客戶端創(chuàng)建紅包的過程類似,故而不再贅述。
所述客戶端,用于發(fā)送用于創(chuàng)建紅包的請求數(shù)據(jù)包;
所述紅包服務(wù)器,用于接收到所述請求數(shù)據(jù)包;判斷所述請求數(shù)據(jù)包中是否包含有貨幣總價值Vt和紅包分配份數(shù)Cn,其中Cn為正整數(shù)且Cn≥1;若所述請求數(shù)據(jù)包中包含有所述貨幣總價值Vt和所述紅包分配份數(shù)Cn,將所述貨幣總值Vt隨機(jī)分配成Cn份紅包,每份紅包對應(yīng)有各自的貨幣價值;為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID。
另外,所述紅包服務(wù)器,還用于為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID之后,在多個數(shù)據(jù)庫組中確定出包含有所述主數(shù)據(jù)庫和所述從數(shù)據(jù)庫集合的數(shù)據(jù)庫組,其中,在多個數(shù)據(jù)庫組中,每個數(shù)據(jù)庫組包含有一主數(shù)據(jù)庫和一從數(shù)據(jù)庫集合;利用所述主數(shù)據(jù)庫存儲所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值。
作為一種可選的實(shí)施例,紅包服務(wù)器,還用于將所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值同步存儲到所述從數(shù)據(jù)庫集合中。
下面介紹發(fā)紅包的實(shí)施原理。
所述客戶端,用于發(fā)送搶紅包請求;
所述紅包服務(wù)器,用于接收到由所述客戶端發(fā)送的搶紅包請求,然后判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID;若所述搶紅包請求中攜帶有所述紅包對應(yīng)的身份標(biāo)識ID,隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值;若有所述紅包對應(yīng)的貨幣價值,從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。
基于上述架構(gòu),圖3為本發(fā)明的創(chuàng)建紅包的流程圖:
步驟31,客戶端發(fā)送用于創(chuàng)建紅包的請求數(shù)據(jù)包。
具體來說,在客戶端上,安裝有對應(yīng)的應(yīng)用程序Application。該應(yīng)用程序可以執(zhí)行創(chuàng)建紅包操作,也可以執(zhí)行搶紅包操作。
在創(chuàng)建紅包時,客戶端上的應(yīng)用程序發(fā)送創(chuàng)建紅包的請求數(shù)據(jù)包CreateData給紅包服務(wù)器Redpacket Server。該請求數(shù)據(jù)包CreateData中至少包含有紅包的貨幣總價值Vt、紅包分配份數(shù)Cn。
紅包服務(wù)器Redpacket Server,是Redpacket Server Cluster的組成單元,每個紅包服務(wù)器Redpacket Server擁有唯一的16位服務(wù)ID,本發(fā)明將其簡稱為RSID。
請求數(shù)據(jù)包CreateData發(fā)送到哪一個紅包服務(wù)器Redpacket Server由隨機(jī)函數(shù)Random(time(NULL))得出的結(jié)果Rm對紅包服務(wù)器Redpacket Server總數(shù)量Rn取模確定的。例如:Rm%Rn為0,則請求數(shù)據(jù)包CreateData的落點(diǎn)就是第1個紅包服務(wù)器Redpacket Server上,依次類推。
步驟32,所述紅包服務(wù)器接收到所述請求數(shù)據(jù)包。
步驟33,所述紅包服務(wù)器判斷所述請求數(shù)據(jù)包中是否包含有貨幣總價值Vt和紅包分配份數(shù)Cn。
其中,Cn為正整數(shù)且Cn≥1。
具體來說,紅包服務(wù)器Redpacket Server檢查請求數(shù)據(jù)包CreateData中是否攜帶必要參數(shù)。如請求數(shù)據(jù)包CreateData中是否攜帶了貨幣總價值Vt,紅包分配份數(shù)Cn,若都不存在,或者只有一個參數(shù)存在,則直接返回創(chuàng)建紅包失敗。
若貨幣總價值Vt,紅包分配份數(shù)Cn都存在,則進(jìn)入步驟34。
步驟34,若所述請求數(shù)據(jù)包中包含有所述貨幣總價值Vt和所述紅包分配份數(shù)Cn,所述紅包服務(wù)器將所述貨幣總值Vt隨機(jī)分配成Cn份紅包,每份紅包對應(yīng)有各自的貨幣價值。
具體來說,紅包服務(wù)器Redpacket Server將貨幣總值Vt隨機(jī)分配(分配規(guī)則可根據(jù)不同的業(yè)務(wù)需求自定義)成Cn份紅包,每個紅包包含貨幣價值Vn。
在分配的實(shí)施過程中,有兩種分配方式:
第一種分配方式:以Cn份紅包為標(biāo)準(zhǔn),對所述貨幣總值Vt進(jìn)行分配,每份紅包中的貨幣價值隨機(jī)。舉例來說,Cn=5,貨幣總值=100塊,那么將這100塊分成5個紅包,每個紅包的貨幣價值可以隨機(jī),例如50塊、20塊、10塊、10塊、10塊。當(dāng)然也可以平均分配,每個紅包20塊。
第二種分配方式,以貨幣價值為標(biāo)準(zhǔn)對所述貨幣總值Vt進(jìn)行分配,紅包的份數(shù)Cn隨機(jī)。舉例來說,貨幣總值=100塊,每個紅包的貨幣價值為1塊或者2塊,那么按照貨幣價值進(jìn)行分配,就可以分配到50個紅包-100個紅包。
步驟35,所述紅包服務(wù)器為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID。
具體來說,每個紅包有唯一的64位身份標(biāo)識ID,簡稱為RPID。RPID的高32位為當(dāng)前時間戳,中間的16位為RSID,低16位為0~65536循環(huán)的自增長ID。
紅包服務(wù)器為所述Cn份紅包創(chuàng)建各自的身份標(biāo)識ID之后,紅包服務(wù)器在多個數(shù)據(jù)庫組中確定出包含有所述主數(shù)據(jù)庫和所述從數(shù)據(jù)庫集合的數(shù)據(jù)庫組。其中,在多個數(shù)據(jù)庫組中,每個數(shù)據(jù)庫組包含有一主數(shù)據(jù)庫和一從數(shù)據(jù)庫集合。
故而,在步驟35之后會執(zhí)行步驟36:所述紅包服務(wù)器利用所述主數(shù)據(jù)庫存儲所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值。舉例來說,選在一個Redis Group數(shù)據(jù)庫時,對RPID進(jìn)行BKDR hash得到結(jié)果Hn,Hn對Redis Group總量Gn取模確認(rèn)落點(diǎn)在哪個Redis Group上。Hn%Gn為0,則紅包數(shù)據(jù)就落地到第1個Redis Group上,依次類推。
在Redis Group內(nèi),Master Redis用List數(shù)據(jù)結(jié)構(gòu)存儲Cn份紅包,Key值為RPID。
完成此流程后,Redis主、從同步機(jī)制會自動完成數(shù)據(jù)同步工作。即步驟37:所述紅包服務(wù)器將所述Cn份紅包、所述Cn份紅包各自身份標(biāo)識ID、所述Cn份紅包各自的貨幣價值同步存儲到所述從數(shù)據(jù)庫集合中。
返回紅包創(chuàng)建成功的結(jié)果。
圖4為本發(fā)明一種處理紅包的方法的流程圖。
步驟41,所述客戶端發(fā)送搶紅包請求。
具體來說,客戶端Client發(fā)送搶紅包請求GrabData。用戶A在客戶端發(fā)出的紅包,都攜帶有對應(yīng)的身份標(biāo)識ID。故而用戶B在搶紅包時,客戶端會基于用戶B的操作生成搶紅包請求,該請求會攜帶該紅包對應(yīng)的身份標(biāo)識ID,然后將搶紅包請求發(fā)送給網(wǎng)關(guān)服務(wù)Gate Server。網(wǎng)關(guān)服務(wù)Gate Server是Gate Server Cluster的組成單元。
Gate Server將搶紅包請求GrabData轉(zhuǎn)發(fā)到內(nèi)網(wǎng)的紅包服務(wù)器Redpacket Server。
步驟42,所述紅包服務(wù)器接收到由所述客戶端發(fā)送的搶紅包請求,然后判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID。
若所述搶紅包請求中沒有攜帶所述紅包對應(yīng)的身份標(biāo)識ID,生成貨幣價值為0的紅包返回給所述客戶端。
具體來說,Redpacket Server通過檢查搶紅包請求GrabData的數(shù)據(jù)是否有效(例如,是否包含合法的RPID),如果合法則進(jìn)入下一流程,否則返回未搶到紅包獎勵的結(jié)果(偽造一條Vn為0的紅包數(shù)據(jù)返回)。
步驟43,若所述搶紅包請求中攜帶有所述紅包對應(yīng)的身份標(biāo)識ID,所述紅包服務(wù)器隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值。
第一查詢數(shù)據(jù)庫是多個查詢數(shù)據(jù)庫中任意確定的一查詢數(shù)據(jù)庫,其作用是基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值。若沒有所述紅包對應(yīng)的貨幣價值,生成貨幣價值為0的紅包返回給所述客戶端,表示未搶到紅包獎勵。
具體來說,在某一個Slave Redis中查詢id為RPID的紅包中是否任然存在紅包,如果存在,則進(jìn)入下一流程,否則返回未搶到紅包的結(jié)果(偽造一條Vn為0的紅包數(shù)據(jù)返回)。
步驟44,若有所述紅包對應(yīng)的貨幣價值,所述紅包服務(wù)器從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。
具體來說,在Master Redis中找到Key為RPID的List,并pop出一條紅包數(shù)據(jù),如果List為空或者不存在,則偽造一條Vn為0的紅包數(shù)據(jù)返回。到此處就可返回成功搶紅包的結(jié)果。
將紅包中Vn大于0的數(shù)據(jù)和UID拋入MQ(MessageQueue消息隊(duì)列)異步完成貨幣交易。
本方案的關(guān)鍵點(diǎn)在于Redis Group。
Redis Group根據(jù)RPID分片,可橫線擴(kuò)展Redis Group用于均衡不同的紅包帶來的請求壓力。每個Redis Group中的Slave Redis也能橫向擴(kuò)展,用于均衡同一個紅包帶來的請求壓力。具體每一個紅包List落在哪一個Redis Group上,是根據(jù)RPID做BKDR hash確定的,如此保證了離散型。
Redis Group采用Slave Redis 1來持久化紅包數(shù)據(jù),可避免Master Redis和其他Slave Redis因持久化數(shù)據(jù)而降低QPS。
采用通過Slave Redis查紅包中是否有剩余紅包,再確定是否要去Master Redis中完成相應(yīng)操作。雖然搶紅包的client數(shù)量可能在百萬級,但是紅包真正能分配出去的份額遠(yuǎn)在這個數(shù)量級之下(千或者萬級別)。通過從Slave Redis中查詢紅包剩余數(shù)量就能過濾掉90%以上Mater Redis非必要響應(yīng)的GrabData。降低了Mater Redis的壓力,就直接提升了搶寶箱的響應(yīng)效率。
通過本發(fā)明的一個或者多個實(shí)施例,本發(fā)明具有以下有益效果或者優(yōu)點(diǎn):
本發(fā)明公開了一種處理紅包的方法及系統(tǒng),當(dāng)所述客戶端發(fā)送搶紅包請求之后,所述紅包服務(wù)器判斷所述搶紅包請求中是否攜帶所述紅包對應(yīng)的身份標(biāo)識ID;若是則隨機(jī)從所述多個查詢數(shù)據(jù)庫中的確定出第一查詢數(shù)據(jù)庫,并利用所述第一查詢數(shù)據(jù)庫基于所述紅包對應(yīng)的身份標(biāo)識ID查找是否有所述紅包對應(yīng)的貨幣價值;若有所述紅包對應(yīng)的貨幣價值,所述紅包服務(wù)器從所述主數(shù)據(jù)庫中獲取所述紅包對應(yīng)的貨幣價值返回給所述客戶端。本發(fā)明將數(shù)據(jù)庫組分為主數(shù)據(jù)庫和從數(shù)據(jù)庫集合,采用通過從數(shù)據(jù)庫集合中的查詢數(shù)據(jù)庫來查紅包中是否有剩余紅包,再確定是否要去主數(shù)據(jù)庫中完成相應(yīng)操作,降低了主數(shù)據(jù)庫的壓力,直接提升了搶紅包的響應(yīng)效率。
盡管已描述了本申請的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的普通技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。