面試官三連問(wèn):分布式鎖你知道多少?

特邀導(dǎo)師:波波

前線下知名機(jī)構(gòu)教學(xué)總監(jiān)综看、CSDN博客專家品腹,曾就職于用友軟件電力事業(yè)部。參與項(xiàng)目:中國(guó)華電PMIS項(xiàng)目红碑、中國(guó)華電集團(tuán)ERP系統(tǒng)舞吭、中國(guó)國(guó)電PMIS項(xiàng)目等

分布式鎖經(jīng)常出現(xiàn)在面試的過(guò)程中,通常面試官會(huì)從服務(wù)框架(Spring Cloud析珊、Dubbo)聊起羡鸥,一路聊到分布式事務(wù)、分布式鎖忠寻、ZooKeeper等知識(shí)惧浴。所以這篇文章以面試的角度帶你了解分布式鎖這塊知識(shí)。

01分布式鎖的解決方案有哪些

分布式鎖奕剃,顧名思義是分布式環(huán)境下使用的鎖衷旅,重點(diǎn)是鎖。它的作用是保護(hù)數(shù)據(jù)安全纵朋。

分布式鎖

隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展芜茵,數(shù)據(jù)量的不斷增加,業(yè)務(wù)邏輯日趨復(fù)雜倡蝙,在這種背景下,傳統(tǒng)的集中式系統(tǒng)已經(jīng)無(wú)法滿足我們的業(yè)務(wù)需求绞佩,分布式系統(tǒng)被應(yīng)用在更多的場(chǎng)景寺鸥,而在分布式系統(tǒng)中訪問(wèn)共享資源就需要一種互斥機(jī)制,來(lái)防止彼此之間的互相干擾品山,以保證一致性胆建,在這種情況下,我們就需要用到分布式鎖肘交。分布式鎖的解決方案有MySQL笆载、Redis、Zookeeper等等。

MYSQL

MYSQL通過(guò)方式如下:

01利用mysql唯一索引

數(shù)據(jù)庫(kù)中的每一條記錄就是一把鎖凉驻,利用的MySQL唯一索引的排他性腻要。如果有多個(gè)請(qǐng)求同時(shí)提交到數(shù)據(jù)庫(kù)的話,數(shù)據(jù)庫(kù)會(huì)保證只有一個(gè)操作可以成功涝登,那么我們就可以認(rèn)為操作成功的那個(gè)線程獲得了該方法的鎖雄家,當(dāng)方法執(zhí)行完畢之后,想要釋放鎖的話胀滚,刪除這條數(shù)據(jù)庫(kù)記錄即可趟济。

利用mysql唯一索引圖

02悲觀鎖 /行鎖

悲觀鎖是使用lock方法,利用for update?加顯式的行鎖咽笼,這樣就能利用這個(gè)行級(jí)的排他鎖來(lái)實(shí)現(xiàn)分布式鎖了顷编,同時(shí)unlock的時(shí)候只要釋放commit這個(gè)事務(wù),就能達(dá)到釋放鎖的目的剑刑。

悲觀鎖圖

03樂(lè)觀鎖version

樂(lè)觀鎖比悲觀鎖的性能高媳纬,樂(lè)觀鎖并不是鎖,只是一種設(shè)計(jì)思想叛甫。它的實(shí)現(xiàn)方式是使用數(shù)據(jù)版本(Version)記錄機(jī)制层宫。

樂(lè)觀鎖

Redis

選用Redis實(shí)現(xiàn)分布式鎖原因有

(1)Redis有很高的性能;

(2)Redis命令對(duì)此支持較好其监,實(shí)現(xiàn)起來(lái)比較方便萌腿。

Redis使用場(chǎng)景是在并發(fā)量特別高的情況下。

Zookeeper

Zookeeper是分布式協(xié)調(diào)框架抖苦,常見(jiàn)組件出現(xiàn)問(wèn)題去協(xié)調(diào)毁菱。Zookeeper使用的場(chǎng)景有注冊(cè)中心、配置中心锌历、動(dòng)態(tài)上下線感知贮庞、分布式鎖等等。

Zookeeper的集群機(jī)制是重點(diǎn)考核內(nèi)容究西。它是半數(shù)存活機(jī)制窗慎,整個(gè)集群節(jié)點(diǎn)中有半數(shù)以上的節(jié)點(diǎn)存活。

集群節(jié)點(diǎn)的角色

分為L(zhǎng)eader和follower兩類卤材。

Leader是集群工作的核心遮斥。主要工作是所有數(shù)據(jù)的讀寫操作。

follower是集群的跟隨者扇丛∈趼穑可以存儲(chǔ)數(shù)據(jù),每一個(gè)節(jié)點(diǎn)可以存數(shù)據(jù)帆精。主要工作是所有數(shù)據(jù)的讀取操作较屿。

短暫節(jié)點(diǎn)是Zookeeper的節(jié)點(diǎn)其中的一個(gè)類型隧魄,它帶有-e屬性。它的效果是誰(shuí)創(chuàng)建的節(jié)點(diǎn)隘蝎,大家都可以看到购啄,且這個(gè)節(jié)點(diǎn)的創(chuàng)建者下線后節(jié)點(diǎn)會(huì)消失。特性有:有序末贾、短暫闸溃、事件監(jiān)聽(tīng)機(jī)制

02Zookeeper怎么實(shí)現(xiàn)分布式鎖

Zookeeper分布式鎖原理

約定:序號(hào)最小的獲取鎖拱撵;

序號(hào)不是最小就監(jiān)聽(tīng)序號(hào)比他小的前一個(gè)節(jié)點(diǎn)辉川;

如果節(jié)點(diǎn)被喚醒,判斷喚醒的節(jié)點(diǎn)是否是序號(hào)最小的節(jié)點(diǎn)拴测。如果是最小的獲取鎖乓旗;如果不是最小的,那么就監(jiān)聽(tīng)比他小的節(jié)點(diǎn)

zookeeper分布式鎖原理圖

03Redis如何實(shí)現(xiàn)分布式

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

(1)獲取鎖的時(shí)候集索,使用setnx加鎖屿愚,并使用expire命令為鎖添加一個(gè)超時(shí)時(shí)間,超過(guò)該時(shí)間則自動(dòng)釋放鎖务荆,鎖的value值為一個(gè)隨機(jī)生成的UUID妆距,通過(guò)此在釋放鎖的時(shí)候進(jìn)行判斷;

(2)獲取鎖的時(shí)候還設(shè)置一個(gè)

獲取的超時(shí)時(shí)間函匕,若超過(guò)這個(gè)時(shí)間則放棄獲取鎖娱据;

(3)釋放鎖的時(shí)候,通過(guò)UUID判斷是不是該鎖盅惜,若是該鎖中剩,則執(zhí)行delete進(jìn)行鎖釋放。

Redis分布式鎖演示圖


分布式鎖在日常Coding中經(jīng)常使用抒寂,但分布式鎖這方面知識(shí)依然很深?yuàn)W结啼。希望這篇文章能讓你清楚分布式鎖的解決方案,進(jìn)一步提升查看源碼的能力屈芜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末郊愧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子井佑,更是在濱河造成了極大的恐慌糕珊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅糟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡澜公,警方通過(guò)查閱死者的電腦和手機(jī)姆另,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門喇肋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人迹辐,你說(shuō)我怎么就攤上這事蝶防。” “怎么了明吩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵间学,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我印荔,道長(zhǎng)低葫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任仍律,我火速辦了婚禮嘿悬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘水泉。我一直安慰自己善涨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布草则。 她就那樣靜靜地躺著钢拧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炕横。 梳的紋絲不亂的頭發(fā)上源内,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音看锉,去河邊找鬼姿锭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伯铣,可吹牛的內(nèi)容都是我干的呻此。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腔寡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼焚鲜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起放前,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忿磅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后凭语,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葱她,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年似扔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吨些。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓谆。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豪墅,靈堂內(nèi)的尸體忽然破棺而出泉手,到底是詐尸還是另有隱情,我是刑警寧澤偶器,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布斩萌,位于F島的核電站,受9級(jí)特大地震影響屏轰,放射性物質(zhì)發(fā)生泄漏颊郎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一亭枷、第九天 我趴在偏房一處隱蔽的房頂上張望袭艺。 院中可真熱鬧,春花似錦叨粘、人聲如沸猾编。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)答倡。三九已至,卻和暖如春驴党,著一層夾襖步出監(jiān)牢的瞬間瘪撇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工港庄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倔既,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓鹏氧,卻偏偏與公主長(zhǎng)得像渤涌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子把还,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 最近小萊去大廠面試实蓬,最終掛在了分布式鎖上,于是回來(lái)后認(rèn)真整理了這篇文章吊履,以期下次面試遇到同樣的問(wèn)題時(shí)一雪前恥......
    呃呃呃_b6ae閱讀 98評(píng)論 0 1
  • 什么是分布式鎖? 今天跟大家聊一聊分布式鎖缀踪。 首先說(shuō)下什么是分布式鎖居砖,當(dāng)我們?cè)谶M(jìn)行下訂單減庫(kù)存燕锥,搶票,選課悯蝉,搶紅包...
    Java圈子閱讀 605評(píng)論 0 0
  • 久違的晴天,家長(zhǎng)會(huì)托慨。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí)鼻由,離放學(xué)已經(jīng)沒(méi)多少時(shí)間了。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)厚棵。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,494評(píng)論 16 22
  • 創(chuàng)業(yè)是很多人的夢(mèng)想蕉世,多少人為了理想和不甘選擇了創(chuàng)業(yè)來(lái)實(shí)現(xiàn)自我價(jià)值,我就是其中一個(gè)婆硬。 創(chuàng)業(yè)后狠轻,我由女人變成了超人,什...
    亦寶寶閱讀 1,802評(píng)論 4 1
  • 今天感恩節(jié)哎彬犯,感謝一直在我身邊的親朋好友向楼。感恩相遇!感恩不離不棄谐区。 中午開(kāi)了第一次的黨會(huì)湖蜕,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,551評(píng)論 0 11