成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

在成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標受眾和市場情況進行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計方向。成都創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護等功能。

分布式趨勢

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

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

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

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

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

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

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

分布式鎖可用的四個條件:

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

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

編寫ILock接口

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

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

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

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

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

LockGetter抽象類

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

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

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

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

第一個參數(shù)為key,我們使用key來當鎖,因為key是唯一的。

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

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

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

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

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

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

總結(jié):

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

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

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

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

網(wǎng)頁題目:掌握分布式事務(wù)鎖,這個大廠實戰(zhàn)訂單鎖你一定要會
文章鏈接:http://jinyejixie.com/article34/jpdipe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)網(wǎng)頁設(shè)計公司、域名注冊、動態(tài)網(wǎng)站網(wǎng)站制作、網(wǎng)站建設(shè)

廣告

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

小程序開發(fā)
西城区| 丰镇市| 宜春市| 喜德县| 松潘县| 民勤县| 扎囊县| 阳山县| 田林县| 于都县| 乌鲁木齐县| 福海县| 梁河县| 高州市| 铜山县| 城固县| 安图县| 大英县| 金寨县| 平塘县| 中西区| 乌海市| 句容市| 盐池县| 稷山县| 鸡西市| 平谷区| 阿克苏市| 靖江市| 林口县| 通化市| 新安县| 永善县| 阳新县| 隆安县| 武平县| 长乐市| 顺平县| 米脂县| 克东县| 深水埗区|