真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)-創(chuàng)新互聯(lián)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

專注于為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)云溪免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

分布式趨勢(shì)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

目前幾乎很多大型網(wǎng)站及應(yīng)用都是分布式部署的,分布式場(chǎng)景中我們也都會(huì)遇到一個(gè)非常重要的問題:數(shù)據(jù)一致性。正如分布式的CAP理論說的一樣:“任何一個(gè)分布式系統(tǒng)都無法同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance),最多只能同時(shí)滿足兩項(xiàng)?!彼?,很多系統(tǒng)在設(shè)計(jì)之初就要對(duì)這三者進(jìn)行取舍。在互聯(lián)網(wǎng)領(lǐng)域的絕大多數(shù)的場(chǎng)景中,都需要犧牲強(qiáng)一致性來換取系統(tǒng)的高可用性,系統(tǒng)往往只需要保證“最終一致性”,只要這個(gè)最終時(shí)間是在用戶可以接受的范圍內(nèi)即可。

在很多場(chǎng)景中,我們?yōu)榱吮WC數(shù)據(jù)的最終一致性,需要很多的技術(shù)方案來支撐,比如分布式事務(wù)、分布式鎖、定時(shí)任務(wù)調(diào)度等。盡管Java提供了很多并發(fā)處理API,但這些API在分布式場(chǎng)景中就顯得無能為力了。

所以針對(duì)分布式鎖的實(shí)現(xiàn)我們需要借助別的工具,目前比較常用的有以下幾種方案:

  1. 基于數(shù)據(jù)庫實(shí)現(xiàn)分布式鎖
  2. 基于緩存(redis,memcached,tair)實(shí)現(xiàn)分布式鎖
  3. 基于Zookeeper實(shí)現(xiàn)分布式鎖

本篇發(fā)文我們主要說下基于Redis的分布式鎖實(shí)戰(zhàn)。

實(shí)際編寫代碼之前,我們說下首要條件

分布式鎖可用的四個(gè)條件:

  1. 互斥性。在任意時(shí)刻,只有一個(gè)客戶端能持有鎖。
  2. 不會(huì)發(fā)生死鎖。即使有一個(gè)客戶端在持有鎖的期間崩潰而沒有主動(dòng)解鎖,也能保證后續(xù)其他客戶端能加鎖。
  3. 具有容錯(cuò)性。只要大部分的Redis節(jié)點(diǎn)正常運(yùn)行,客戶端就可以加鎖和解鎖。
  4. 解鈴還須系鈴人。加鎖和解鎖必須是同一個(gè)客戶端,客戶端自己不能把別人加的鎖給解了。

分布式鎖實(shí)戰(zhàn)步驟:

編寫ILock接口

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

編寫ILock接口實(shí)現(xiàn)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

LockGetter抽象類

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

從圖示我們可以看出,通過LockGetter抽象類進(jìn)行具體的加鎖成功或則失敗的具體業(yè)務(wù)走向。這一個(gè)思想同學(xué)們要謹(jǐn)記于心。能夠熟練應(yīng)用的話,他會(huì)使你在編程之路上走的更加順暢。

此外,可以看到,我們實(shí)際加鎖就一行代碼:jedis.set(fieldKey, value, "NX", "EX", seconds);,這個(gè)set()方法一共有五個(gè)形參:

第一個(gè)參數(shù)為key,我們使用key來當(dāng)鎖,因?yàn)閗ey是唯一的。

第二個(gè)參數(shù)為value,我們傳的是requestId,很多童鞋可能不明白,有key作為鎖不就夠了嗎,為什么還要用到value?原因就是我們?cè)谏厦嬷v到可靠性時(shí),分布式鎖要滿足第四個(gè)條件解鈴還須系鈴人,通過給value賦值為requestId,我們就知道這把鎖是哪個(gè)請(qǐng)求加的了,在解鎖的時(shí)候就可以有依據(jù)。requestId可以使用UUID.randomUUID().toString()方法生成。

第三個(gè)參數(shù)為nxxx,這個(gè)參數(shù)我們填的是NX,意思是SET IF NOT EXIST,即當(dāng)key不存在時(shí),我們進(jìn)行set操作;若key已經(jīng)存在,則不做任何操作;

第四個(gè)參數(shù)為expx,這個(gè)參數(shù)我們傳的是PX,意思是我們要給這個(gè)key加一個(gè)過期的設(shè)置,具體時(shí)間由第五個(gè)參數(shù)決定。

第五個(gè)參數(shù)為time,與第四個(gè)參數(shù)相呼應(yīng),代表key的過期時(shí)間。

總的來說,執(zhí)行上面的set()方法之后會(huì)出現(xiàn)兩種情況:

  1. 當(dāng)前沒有鎖(key不存在),那么就進(jìn)行加鎖操作,并對(duì)鎖設(shè)置個(gè)有效期,同時(shí)value表示加鎖的客戶端。
  2. 鎖已經(jīng)存在,redis不做任何操作。

總結(jié):

使用緩存來實(shí)現(xiàn)分布式鎖優(yōu)點(diǎn):

  1. 可以提供更好的性能,同時(shí)很多緩存服務(wù)都是集群部署的,可以避免單點(diǎn)問題。
  2. 很多緩存服務(wù)都提供了可以用來實(shí)現(xiàn)分布式鎖的方法,比如redis的setnx方法等。
  3. 緩存服務(wù)也都提供了對(duì)數(shù)據(jù)的過期自動(dòng)刪除的支持,可以直接設(shè)置超時(shí)時(shí)間來控制鎖的釋放。

使用緩存實(shí)現(xiàn)分布式鎖盡管性能好,實(shí)現(xiàn)起來較為方便。但也不是沒有缺點(diǎn),有時(shí)候我們的程序內(nèi)部出現(xiàn)異常后可能會(huì)發(fā)生死鎖,這就需要開發(fā)時(shí)候注意代碼編寫,后續(xù)測(cè)試人員測(cè)試時(shí)候測(cè)試案例要盡可能覆蓋。

掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)

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


網(wǎng)頁題目:掌握分布式事務(wù)鎖,這個(gè)大廠實(shí)戰(zhàn)訂單鎖你一定要會(huì)-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/dipips.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部