怎么通過(guò)redis實(shí)現(xiàn)分布式鎖-創(chuàng)新互聯(lián)

本篇文章展示了通過(guò)redis實(shí)現(xiàn)分布式鎖的具體操作,代碼簡(jiǎn)明扼要容易理解,絕對(duì)能讓你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比新洲網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式新洲網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋新洲地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。

分布式鎖是控制分布式系統(tǒng)之間同步訪問(wèn)共享資源的一種方式。在分布式系統(tǒng)中,常常需要協(xié)調(diào)他們的動(dòng)作。如果不同的系統(tǒng)或是同一個(gè)系統(tǒng)的不同主機(jī)之間共享了一個(gè)或一組資源,那么訪問(wèn)這些資源的時(shí)候,往往需要互斥來(lái)防止彼此干擾來(lái)保證一致性,在這種情況下,便需要使用到分布式鎖。

分布式鎖需要解決的問(wèn)題

互斥性:任意時(shí)刻只能有一個(gè)客戶端擁有鎖,不能同時(shí)多個(gè)客戶端獲取

安全性:鎖只能被持有該鎖的用戶刪除,而不能被其他用戶刪除

死鎖:獲取鎖的客戶端因?yàn)槟承┰蚨礄C(jī),而未能釋放鎖,其他客戶端無(wú)法獲取此鎖,需要有機(jī)制來(lái)避免該類問(wèn)題的發(fā)生

容錯(cuò):當(dāng)部分節(jié)點(diǎn)宕機(jī),客戶端仍能獲取鎖或者釋放鎖

如何通過(guò)Redis實(shí)現(xiàn)分布式鎖:

SETNX key value :如果key不存在,則創(chuàng)建并賦值

時(shí)間復(fù)雜度: 0(1)

返回值:設(shè)置成功,返回1;設(shè)置失敗,返回0。

但是此時(shí)我們獲取的key是長(zhǎng)期有效的,所以我們應(yīng)該如何解決長(zhǎng)期有效的問(wèn)題呢?

EXPIRE key seconds

設(shè)置key的生存時(shí)間,當(dāng)key過(guò)期時(shí)(生存時(shí)間為0) ,會(huì)被自動(dòng)刪除

缺點(diǎn):原子性得不到滿足

下面是偽代碼

//該程序存在危險(xiǎn),如果執(zhí)行到第二行就崩潰了,則此時(shí)key會(huì)被一直占用而無(wú)法被釋放
RedisService redisService = SpringUtils.getBean(Redi sService.class); 
long status = redisService.setnx(key, "1");
if(status == 1) {
	redisService.expire(key, expire);
	//執(zhí)行獨(dú)占資源邏輯
	doOcuppiedWork();
}

Redis實(shí)現(xiàn)分布式鎖:

SET key value [EX seconds] [PX milliseconds] [NX|XX]

EX second :設(shè)置鍵的過(guò)期時(shí)間為second秒

PX millisecond :設(shè)置鍵的過(guò)期時(shí)間為millisecond毫秒

NX :只在鍵不存在時(shí),才對(duì)鍵進(jìn)行設(shè)置操作

XX:只在鍵已經(jīng)存在時(shí),才對(duì)鍵進(jìn)行設(shè)置操作

SET操作成功完成時(shí),返回OK ,否則返回nil

下面是偽代碼

RedisService redisService = SpringUtils.getBean(RedisService.class); .
String result = redisService.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
if ("OK".equals(result)) {
	//執(zhí)行獨(dú)占資源邏輯
	doOcuppiedWork();
}

大量的key同時(shí)過(guò)期的注意事項(xiàng)

集中過(guò)期,由于清除大量的key很耗時(shí),會(huì)出現(xiàn)短暫的卡頓現(xiàn)象

解放方案:在設(shè)置key的過(guò)期時(shí)間的時(shí)候,給每個(gè)key加上隨機(jī)值

看完上述內(nèi)容,你們掌握通過(guò)redis實(shí)現(xiàn)分布式鎖的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:怎么通過(guò)redis實(shí)現(xiàn)分布式鎖-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article48/psehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、用戶體驗(yàn)響應(yīng)式網(wǎng)站、建站公司、品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司