本發(fā)明涉及互聯(lián)網(wǎng)臨界資源處理技術領域,具體地,涉及基于redis實現(xiàn)的高并發(fā)臨界資源處理方法及系統(tǒng)。
背景技術:
在互聯(lián)網(wǎng)大用戶高并發(fā)的情況下,對于某些臨界節(jié)點,為了避免并發(fā)的影響,通常會使用加鎖等機制,來保護臨界資源,避免多線程并發(fā)異常。
加鎖本身也是一種常見的技術,缺點是當一個線程獲取到鎖之后,其他線程只能等待,直到釋放鎖,其他線程才能繼續(xù)執(zhí)行。在高并發(fā)情況下,對系統(tǒng)效率有很大的影響,并且因為鎖的存在,可能會導致系統(tǒng)死鎖的發(fā)生。另外,對于大容量的系統(tǒng),通常會通過負載均衡來做服務器的水平擴展從而增加服務器的容量,在這種情況下,即使加鎖也無法處理多個服務器之間的并發(fā)問題。
redis是一個高性能的內(nèi)存數(shù)據(jù)庫。redis使用單進程單線程模式,可以保證并發(fā)順序。內(nèi)存數(shù)據(jù)庫,所有操作通過內(nèi)存直接處理,效率極高,每秒可以處理高達800-1000萬個請求,并支持分布式集群配置。利用redis的這個特點,可以輕松處理高并發(fā)情況下的臨界資源問題。
技術實現(xiàn)要素:
針對現(xiàn)有技術中的缺陷,本發(fā)明的目的是提供一種基于redis實現(xiàn)的高并發(fā)臨界資源處理方法及系統(tǒng)。
根據(jù)本發(fā)明提供的基于redis實現(xiàn)的高并發(fā)臨界資源處理方法,包括如下步驟:
步驟1:redis的消息隊列接收到多線程訪問臨界資源的請求;
步驟2:在執(zhí)行第一個訪問請求時,為待訪問的臨界資源創(chuàng)建一個redis鍵值;
步驟3:通過redis鍵值的訪問計數(shù)判斷臨界資源是否被訪問成功,若已經(jīng)有任一個線程訪問成功,則退回其余線程,并結(jié)束流程。
優(yōu)選地,所述步驟3包括:判斷redis鍵值的訪問計數(shù),若訪問計數(shù)為0時,則允許訪問臨界資源,并將訪問計數(shù)自增1;若訪問計數(shù)大于0,則認為某線程獲取了所述臨界資源的訪問,結(jié)束流程。
根據(jù)本發(fā)明提供的基于redis實現(xiàn)的高并發(fā)臨界資源處理系統(tǒng),包括:
請求接收模塊:通過redis的消息隊列接收到多線程訪問臨界資源的請求;
redis鍵值創(chuàng)建模塊:用于在執(zhí)行第一個訪問請求時,為待訪問的臨界資源創(chuàng)建一個redis鍵值;
訪問結(jié)果判別模塊:通過redis鍵值的訪問計數(shù)判斷臨界資源是否被訪問成功,若已經(jīng)有任一個線程訪問成功,則退回其余線程。
優(yōu)選地,所述訪問結(jié)果判別模塊用于判斷redis鍵值的訪問計數(shù),若訪問計數(shù)為0時,則允許訪問臨界資源,并將訪問計數(shù)自增1;若訪問計數(shù)大于0,則認為某線程獲取了所述臨界資源的訪問。
與現(xiàn)有技術相比,本發(fā)明具有如下的有益效果:
本發(fā)明提供的基于redis實現(xiàn)的高并發(fā)臨界資源處理方法及系統(tǒng),能夠解決高并發(fā)時系統(tǒng)臨界資源的并發(fā)訪問問題,既不影響高并發(fā)時的性能,也不會產(chǎn)生死鎖,實現(xiàn)高并發(fā)下臨界資源的高效處理。
附圖說明
通過閱讀參照以下附圖對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:
圖1為本發(fā)明提供的基于redis實現(xiàn)的高并發(fā)臨界資源處理方法的流程圖。
具體實施方式
下面結(jié)合具體實施例對本發(fā)明進行詳細說明。以下實施例將有助于本領域的技術人員進一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應當指出的是,對本領域的普通技術人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變化和改進。這些都屬于本發(fā)明的保護范圍。
根據(jù)本發(fā)明提供的基于redis實現(xiàn)的高并發(fā)臨界資源處理方法,包括如下步驟:
步驟1:當多線程訪問臨界資源的時候,系統(tǒng)會將多線程請求發(fā)送給redis的消息隊列;
步驟2:Redis會按順序,依次取出消息開始執(zhí)行;
步驟3:當?shù)谝粋€請求執(zhí)行時,創(chuàng)建一個臨界資源的redis鍵值;
步驟4:判斷步驟3中的redis鍵值的訪問計數(shù),當訪問計數(shù)為0時,則允許訪問臨界資源,并將訪問計數(shù)自增1;當訪問計數(shù)的值大于0時,則認為某線程獲取了所述臨界資源的訪問,結(jié)束流程。其他線程直接返回即可。
利用redis的這個特點,無需加鎖,即可高效解決高并發(fā)下的臨界資源并發(fā)問題。
下面結(jié)合具體實施例對本發(fā)明中的技術方案做更加詳細的說明。
多線程請求,調(diào)用redis方法,執(zhí)行對臨界資源的訪問。這些請求會依次會發(fā)送給redis消息隊列。Redis處理進程按順序依次取出消息執(zhí)行。執(zhí)行時,第一個請求首先為臨界資源創(chuàng)建一個鍵值。然后個線程會判斷該鍵值的訪問計數(shù),當訪問計數(shù)為0時,則線程正常執(zhí)行,并將訪問計數(shù)+1.如果訪問計數(shù)大于1,則表明已經(jīng)有線程獲取了此臨界資源的訪問,線程直接返回即可。
本發(fā)明還提供了基于redis實現(xiàn)的高并發(fā)臨界資源處理系統(tǒng),包括:
請求接收模塊:通過redis的消息隊列接收到多線程訪問臨界資源的請求;
redis鍵值創(chuàng)建模塊:用于在執(zhí)行第一個訪問請求時,為待訪問的臨界資源創(chuàng)建一個redis鍵值;
訪問結(jié)果判別模塊:通過redis鍵值的訪問計數(shù)判斷臨界資源是否被訪問成功,若已經(jīng)有任一個線程訪問成功,則退回其余線程。
所述訪問結(jié)果判別模塊用于判斷redis鍵值的訪問計數(shù),若訪問計數(shù)為0時,則允許訪問臨界資源,并將訪問計數(shù)自增1;若訪問計數(shù)大于0,則認為某線程獲取了所述臨界資源的訪問。
以上對本發(fā)明的具體實施例進行了描述。需要理解的是,本發(fā)明并不局限于上述特定實施方式,本領域技術人員可以在權(quán)利要求的范圍內(nèi)做出各種變化或修改,這并不影響本發(fā)明的實質(zhì)內(nèi)容。在不沖突的情況下,本申請的實施例和實施例中的特征可以任意相互組合。