本發(fā)明涉及一種控制紅包的方法以及系統(tǒng)。
背景技術(shù):
在當今互聯(lián)網(wǎng)行業(yè)高速發(fā)展的時代,搶紅包這種線上的溝通交友方式,已經(jīng)越來越受到廣大人民群眾的追捧;當大量用戶爭搶同一個紅包的操作時,訪問量的上升,多進程的開辟,此時相對應于服務器則需要較高的性能要求和網(wǎng)絡質(zhì)量。
在搶紅包的高峰期,存在著紅包個數(shù)少,搶紅包用戶多的情況。在此情況下,存在著同一時刻多用戶搶同一個紅包,或者已經(jīng)被搶的紅包還沒來得及修改紅包狀態(tài)極有可能被其他用戶再次爭搶。因此,如何讓紅包有序的被用戶獲取、避免每次爭搶紅包時獲取數(shù)據(jù)的不一致是紅包系統(tǒng)中主要處理的核心問題。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題,在于提供一種控制紅包的方法以及系統(tǒng),使得處理速度加快,并降低了數(shù)據(jù)庫壓力。
本發(fā)明之一是這樣實現(xiàn)的:一種控制紅包的方法,包括如下步驟:
步驟1、服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值;
步驟2、服務器根據(jù)用戶的先后順序,依次將子紅包的序列值分配給用戶;
步驟3、根據(jù)序列值將子紅包的金額分配給對應的用戶。
進一步地,所述步驟1進一步具體為:服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值,并存入服務器數(shù)據(jù)緩存中。
進一步地,所述步驟2進一步具體為:服務器根據(jù)用戶的先后順序,將一子紅包的序列值分配給一用戶,之后進入步驟3;或者服務器根據(jù)用戶的先后順序,依次將限定個數(shù)的子紅包的序列值分配給限定個數(shù)的用戶。
進一步地,所述步驟3進一步具體為:服務器開啟一進程,并開啟共享內(nèi)存鎖,之后根據(jù)序列值為用戶分配子紅包的金額,之后服務器關(guān)閉共享內(nèi)存鎖;若存在子紅包未分配,則進入步驟2。
本發(fā)明之二是這樣實現(xiàn)的:一種控制紅包的系統(tǒng),包括如下模塊:
設(shè)置模塊,服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值;
分配序列值模塊,服務器根據(jù)用戶的先后順序,依次將子紅包的序列值分配給用戶;
控制紅包模塊,根據(jù)序列值將子紅包的金額分配給對應的用戶。
進一步地,所述設(shè)置模塊進一步具體為:服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值,并存入服務器數(shù)據(jù)緩存中。
進一步地,所述分配序列值模塊進一步具體為:服務器根據(jù)用戶的先后順序,將一子紅包的序列值分配給一用戶,之后進入步驟3;或者服務器根據(jù)用戶的先后順序,依次將限定個數(shù)的子紅包的序列值分配給限定個數(shù)的用戶。
進一步地,所述控制紅包模塊進一步具體為:服務器開啟一進程,并開啟共享內(nèi)存鎖,之后根據(jù)序列值為用戶分配子紅包的金額,之后服務器關(guān)閉共享內(nèi)存鎖;若存在子紅包未分配,則進入分配序列值模塊。
本發(fā)明具有如下優(yōu)點:本發(fā)明一種控制紅包的方法以及系統(tǒng),規(guī)避了mysql數(shù)據(jù)庫在高并發(fā)時,使用加鎖操作,大幅降低數(shù)據(jù)庫的性能,吞吐量下降;在資源端,將紅包信息cache在數(shù)據(jù)緩存里,避免第一級邏輯判斷時對數(shù)據(jù)庫大量的訪問鎖操作,分配的資源,減少數(shù)據(jù)庫的負擔;之后通過調(diào)用子進程,批量串行處理并發(fā)的紅包數(shù)據(jù),之后在與mysql鏈接,實行數(shù)據(jù)的更新,達到無鎖等待,大幅提升性能。
附圖說明
下面參照附圖結(jié)合實施例對本發(fā)明作進一步的說明。
圖1為本發(fā)明方法執(zhí)行流程圖。
圖2為本發(fā)明系統(tǒng)的原理框圖。
圖3為本發(fā)明紅包與子紅包的關(guān)系示意圖。
具體實施方式
如圖1和圖3所示,本發(fā)明控制紅包的方法,包括如下步驟:
步驟1、服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值,并存入服務器數(shù)據(jù)緩存中;
步驟2、服務器根據(jù)用戶的先后順序,將一子紅包的序列值分配給一用戶,之后進入步驟3;或者服務器根據(jù)用戶的先后順序,依次將限定個數(shù)的子紅包的序列值分配給限定個數(shù)的用戶;
步驟3、服務器開啟一進程,并開啟共享內(nèi)存鎖,之后根據(jù)序列值為用戶分配子紅包的金額,之后服務器關(guān)閉共享內(nèi)存鎖;若存在子紅包未分配(即服務器數(shù)據(jù)緩存中設(shè)有子紅包的庫存量,該庫存量不為零時表示存在子紅包未分配),則進入步驟2。
如圖2和圖3所示,本發(fā)明控制紅包的系統(tǒng),包括如下模塊:
設(shè)置模塊,服務器將紅包分為限定個子紅包,設(shè)置每個子紅包的金額以及序列值,并存入服務器數(shù)據(jù)緩存中;
分配序列值模塊,服務器根據(jù)用戶的先后順序,將一子紅包的序列值分配給一用戶,之后進入步驟3;或者服務器根據(jù)用戶的先后順序,依次將限定個數(shù)的子紅包的序列值分配給限定個數(shù)的用戶;
控制紅包模塊,服務器開啟一進程,并開啟共享內(nèi)存鎖,之后根據(jù)序列值為用戶分配子紅包的金額,之后服務器關(guān)閉共享內(nèi)存鎖;若存在子紅包未分配,則進入分配序列值模塊。
數(shù)據(jù)庫中建立紅包維度表,包含發(fā)包者、庫存、總金額、訂單等,相關(guān)紅包信息的表;數(shù)據(jù)庫中建立搶紅包記錄表,子紅包序列值、紅包ID、子紅包金額、分配情況等;在服務器數(shù)據(jù)緩存中處理好之后,再將兩個數(shù)據(jù)庫中的表進行修改,達到無鎖等待,大幅提升性能,并降低數(shù)據(jù)庫的壓力。
雖然以上描述了本發(fā)明的具體實施方式,但是熟悉本技術(shù)領(lǐng)域的技術(shù)人員應當理解,我們所描述的具體的實施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應當涵蓋在本發(fā)明的權(quán)利要求所保護的范圍內(nèi)。