本發(fā)明涉及分布式并發(fā)和JAVA開發(fā)技術(shù)領(lǐng)域,特別是一種分布式優(yōu)先級排隊鎖的實(shí)現(xiàn)方法。
背景技術(shù):
在處理系統(tǒng)并發(fā)請求導(dǎo)致的數(shù)據(jù)異常時一般是使用鎖的方法,而在分布式系統(tǒng)中,一般通過memcached或者redis分布式鎖來實(shí)現(xiàn)。但是面臨并發(fā)量越來越大,請求情況越來越復(fù)雜的情況下,現(xiàn)有方案會有如下問題:
一是現(xiàn)有分布式鎖的解決方案是搶占式,誰先獲取到就誰先處理。而且并發(fā)量大的情況下,可能會導(dǎo)致一個請求由于搶不到鎖而需要很長時間才能處理,甚至一直搶不到鎖而導(dǎo)致無法處理請求;
二是現(xiàn)在的單服務(wù)器上一般使用的排隊鎖來解決此問題,但是并沒有在分布式系統(tǒng)上實(shí)現(xiàn),導(dǎo)致分布式系統(tǒng)無法解決此問題,同時如果直接使用排隊鎖,由于必須按照順序獲取鎖,這會導(dǎo)致獲取鎖效率變低;
三是現(xiàn)有鎖方案,無法設(shè)置優(yōu)先級,導(dǎo)致靈活性變低,無法優(yōu)先處理需求優(yōu)先處理的請求,只能一起搶占或者排隊;
為了保證獲取鎖的效率同時,防止獲取鎖的時間過長的問題,同時提高靈活性,需要一種在在分布式系統(tǒng)獲取鎖中,搶占失敗后不停提升優(yōu)先級,并且可以自定義優(yōu)先級配置的鎖的方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的技術(shù)問題在于提供一種分布式優(yōu)先級排隊鎖的實(shí)現(xiàn)方法,在分布式系統(tǒng)高并發(fā)環(huán)境中保證并發(fā)請求獲取鎖效率同時,解決了可能有請求無法獲取鎖的問題,同時提供一種更靈活的優(yōu)先級來滿足各種特殊請求。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
所述的方法包括如下步驟:
步驟1:給每個請求設(shè)置一個優(yōu)先級和優(yōu)先級策略,并開始獲取鎖;
步驟2:判斷數(shù)據(jù)庫互斥字段是否為空,如果為空,則執(zhí)行步驟3,如果不為空則執(zhí)行步驟6;
步驟3:判斷隊列是否有等待請求,如果沒有等待的請求,則執(zhí)行步驟9,如果有等待的請求,則執(zhí)行步驟4;
步驟4:判斷請求自己是否在隊列中,如果在隊列中,則執(zhí)行步驟5;否則執(zhí)行步驟6;
步驟5:判斷請求自己是否在第一位,如果是第一位,則執(zhí)行步驟9;否則等待一段時間后,重新執(zhí)行步驟2,繼續(xù)獲取鎖;
步驟6:根據(jù)優(yōu)先級策略提升該請求的優(yōu)先級策略;
步驟7:優(yōu)先級是否達(dá)到閾值,如果優(yōu)先級達(dá)到預(yù)設(shè)的優(yōu)先級閾值,則執(zhí)行步驟8,否則等待一段時間后,重新執(zhí)行步驟2,繼續(xù)獲取鎖;
步驟8:把請求放入到排隊隊列,重新執(zhí)行步驟2,繼續(xù)獲取鎖;
步驟9:設(shè)置數(shù)據(jù)庫互斥字段,如果設(shè)置成功,則執(zhí)行步驟10,如果設(shè)置失敗,執(zhí)行步驟6;
步驟10:處理請求并且把數(shù)據(jù)庫互斥字段清空,流程結(jié)束。
所述優(yōu)先級策略是設(shè)置互斥字段失敗后優(yōu)先級增加的步長或者是根據(jù)公式計算出新的優(yōu)先級;
所述數(shù)據(jù)庫互斥字段是指這個字段只能一個請求進(jìn)行設(shè)置更新,一旦一個請求操作成功,則其他請求無法進(jìn)行操作成功。
所述排隊隊列是請求的隊列,在此隊列中請求按照順序來獲取鎖,并且系統(tǒng)會優(yōu)先處理隊列中的請求。
所述的閾值是預(yù)先設(shè)定的一個優(yōu)先級值,當(dāng)請求的優(yōu)先級達(dá)到這個值之后,將可以進(jìn)入到排隊隊列中。
所述的獲取鎖是指獲取一個令牌,只有拿到這個令牌請求才能執(zhí)行,避免請求并發(fā)處理導(dǎo)致數(shù)據(jù)出錯。
本發(fā)明通過在分布式系統(tǒng)中結(jié)合傳統(tǒng)分布式鎖優(yōu)勢,開發(fā)一種靈活設(shè)定優(yōu)先級的排隊鎖的方法,使得分布式系統(tǒng)并發(fā)請求在保持鎖獲取效率的同時,避免個別請求長時間等待的問題,同能能夠給個別請求提升優(yōu)先級,滿足特殊需求。本發(fā)明通過解決這些問題,可能提高分布式系統(tǒng)的請求體驗,提升用戶的滿意度,同時優(yōu)化系統(tǒng),避免請求堵塞減低系統(tǒng)運(yùn)行效率。
附圖說明
下面結(jié)合附圖對本發(fā)明進(jìn)一步說明:
圖1為本發(fā)明方法流程圖。
具體實(shí)施方式
如圖1所示,本發(fā)明的實(shí)施流程如下:
主流程:
釋放鎖:
排隊獲取鎖:
更新優(yōu)先級和判斷是否加入隊列:
設(shè)置優(yōu)先級:
。