java基于jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼-創(chuàng)新互聯(lián)

分布式鎖是啥?

專業(yè)領(lǐng)域包括網(wǎng)站建設(shè)、成都網(wǎng)站制作商城開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,成都創(chuàng)新互聯(lián)的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

單機(jī)鎖的概念:我們正常跑的單機(jī)項(xiàng)目(也就是在tomcat下跑一個(gè)項(xiàng)目不配置集群)想要在高并發(fā)的時(shí)候加鎖很容易就可以搞定,java提供了很多的機(jī)制例如:synchronized、volatile、ReentrantLock等鎖的機(jī)制。


為啥需要分布式鎖:當(dāng)我們的項(xiàng)目比較龐大的時(shí)候,單機(jī)版的項(xiàng)目已經(jīng)不能滿足吞吐量的需求了,需要對(duì)項(xiàng)目做負(fù)載均衡,有可能還需要對(duì)項(xiàng)目進(jìn)行解耦拆分成不同的服務(wù),那么肯定是做成分布式的項(xiàng)目,分布式的項(xiàng)目因?yàn)槭遣煌某绦蚩刂?,所以使用java提供的鎖并不能完全保證并發(fā)需求,需要借助第三方的框架來(lái)實(shí)現(xiàn)對(duì)并發(fā)的阻塞控制,來(lái)滿足實(shí)際業(yè)務(wù)的需要。

一、使用分布式鎖要滿足的幾個(gè)條件:


1.系統(tǒng)是一個(gè)分布式系統(tǒng)(關(guān)鍵是分布式,單機(jī)的可以使用ReentrantLock或者synchronized代碼塊來(lái)實(shí)現(xiàn))
2.共享資源(各個(gè)系統(tǒng)訪問(wèn)同一個(gè)資源,資源的載體可能是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)或者NoSQL)
3.同步訪問(wèn)(即有很多個(gè)進(jìn)程同事訪問(wèn)同一個(gè)共享資源。沒(méi)有同步訪問(wèn),誰(shuí)管你資源競(jìng)爭(zhēng)不競(jìng)爭(zhēng))

二、應(yīng)用的場(chǎng)景例子

管理后臺(tái)的部署架構(gòu)(多臺(tái)tomcat服務(wù)器+redis【多臺(tái)tomcat服務(wù)器訪問(wèn)一臺(tái)redis】+mysql【多臺(tái)tomcat服務(wù)器訪問(wèn)一臺(tái)服務(wù)器上的mysql】)就滿足使用分布式鎖的條件。多臺(tái)服務(wù)器要訪問(wèn)redis全局緩存的資源,如果不使用分布式鎖就會(huì)出現(xiàn)問(wèn)題。 看如下偽代碼:

long N=0L;
//N從redis獲取值
if(N<5){
N++;
//N寫回redis
}

新聞名稱:java基于jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article42/dpseec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、定制開發(fā)、定制網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站改版Google

廣告

聲明:本網(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)

商城網(wǎng)站建設(shè)