蘇執把筆記本放在自己面前的小桌板上,指尖在觸控板上點了幾下,開啟一個空白的編輯器,一邊敲一邊說:“方案有很多,資料庫悲觀鎖、Redis的setnx、Zookeeper的臨時順序節點,你用哪個?”
明燦湊過去看,蘇執的手指在鍵盤上敲得很快,一行一行的基礎程式碼出現在螢幕上,不是完整的實現,而是一個骨架——鎖的介面定義、加鎖解鎖的基本流程、異常處理的框架。
“Redis。”明燦說,語氣裡帶著一點不確定,“用setnx,配合lua指令碼保證原子性,設定過期時間避免死鎖。”
蘇執停下來,側過臉看了她一眼。那一眼很淡,但明燦覺得自己被從頭到腳審視了一遍,像面試時被技術總監盯著等回答的那種感覺,心跳不由自主地加快了幾拍。
“繼續。”蘇執說。
明燦深吸一口氣,開始說:“加鎖的時候用setnx,如果返回成功就拿到鎖,同時設定一個過期時間比如三十秒。如果返回失敗說明鎖被其他例項佔用,可以重試或者直接放棄。鎖的持有者需要在業務邏輯執行完之後釋放鎖,刪除對應的key。為了防止A執行緒的鎖被B執行緒釋放,value要用一個唯一標識,比如UUID或者執行緒ID,釋放的時候先get再判斷,匹配了才能del。”
她說完,怯生生看著蘇執。
蘇執沒有立刻表態,低下頭在鍵盤上又敲了幾行,然後把螢幕轉向明燦。
螢幕上是一個完整的Redis分散式鎖實現,用lua指令碼把判斷和刪除兩個操作合併成一個原子操作,避免了get和del之間的時間視窗。明燦一行一行地看,看到最後一行的時候,發現蘇執還在程式碼末尾加了一行註釋:// 考慮使用Redisson的RLock,自動續期機制更優雅。
明燦盯著那行註釋看了兩秒,然後抬頭看蘇執:“姐姐,你這是……在教我寫程式碼,還是在給我做程式碼審查?”
“都是。”蘇執的聲音很淡,但嘴角有一個極其細微的弧度,像是剋制過但沒完全剋制住,“你剛才說的方案裡,漏了一個關鍵問題。”
明燦愣了:“什麼?”
“鎖過期了但業務還沒執行完怎麼辦?”
明燦張了張嘴,又閉上了。
她確實漏了這個。
如果設定的過期時間是三十秒,但業務邏輯執行了四十秒,那麼鎖在第三十秒的時候就會自動釋放,另一個例項拿到鎖進來執行同樣的任務,等第一個例項執行完再釋放鎖的時候,釋放的是第二個例項的鎖。後果很嚴重——鎖的持有者被誤刪,第二個例項以為自己還有鎖,實際上鎖已經被別人幹掉了。
“所以需要鎖續期。”蘇執說,“拿到鎖之後啟動一個後臺執行緒,每隔一段時間檢查一下鎖是否還在,如果還在就延長過期時間。業務執行完再取消續期,釋放鎖。”
明燦聽得認真,眉頭微微皺著,腦子裡在消化這個方案。她想了想,問了一個問題:“那如果持有鎖的例項突然宕機了,續期執行緒也掛了,鎖是不是就永遠不釋放了?”
蘇執看了她一眼,那一眼裡多了一點東西——不是誇獎,但比誇獎更讓明燦受用,那是一種“你終於開始想邊緣情況了”的認可。
“所以Redis分散式鎖有一個經典的缺陷,就是這個問題。嚴格意義上來說,它做不到百分之百的絕對安全,只能做到百分之九十九點九九。”蘇執的語氣不緊不慢,像在講一門精心準備過的課,“如果需要更高的一致性,可以考慮Zookeeper或者etcd,它們的分散式鎖是基於臨時順序節點和會話心跳實現的,客戶端宕機了節點會自動刪除,不會有死鎖問題。”
她說完,停了一下,看著明燦。
明燦在筆記本上飛快地記著,寫到一半忽然抬頭:“姐姐,你這些東西你剛開始接觸的時候都是在哪學的?我們學校好像都沒教過這麼深。”
蘇執沒有回答,靠回枕頭上,把目光移向窗外。陽光把窗框的影子投在地面上,明晃晃的一片。
“自己看的。”她過了好一會兒才說,聲音比之前輕了一些,“分散式系統設計,網上有很多資料,我那個時候沒人教。”
明燦看著她的側臉,忽然覺得心裡有一種說不清的感覺在往外湧。蘇執這個人,話不多,從不炫耀自己懂什麼、會什麼,但每次她開口說出來的東西,都讓明燦覺得——這個人好像什麼都知道,什麼都考慮過,什麼邊緣情況都在她的腦子裡演練過了。
但轉眼又一想,她那個時候沒人教,什麼都帶靠自己,熬通宵,啃厚厚的書籍,網上查資料,她那麼辛苦,那麼累,才有了今天博學一切的程度。
而這樣的博學一切的人,現在半靠在病床上,手背上還貼著輸液貼,在用一種極其耐心的方式,把那些她花了很多年才學會的東西,一點一點講給她聽。
蘇執將筆記型電腦往推明燦那邊挪了下,靠回枕頭上,聲音淡下來:“按照我說的思路,自己試一下,給你一早上的時間,想通這個問題,做出方案給我看!”
”。好“
。寫地行一行一始開,盤鍵上搭指手把才後然——證保子原、理機宕、期續鎖——遍一了過裡心在點鍵關個幾那的說執蘇把先是而,手著急有沒。碼式程架骨段那的敲才剛執蘇著留還上幕螢,前面己自到拉本記筆把,下應聲小燦明
。關開了下按人被機的臺一像,淡不鹹不表,熱不冷不氣語,態狀作工換切能就秒一下,子橘著吃地慢慢、粥著喝地溫在還才剛明明,怪奇很的真人個這執蘇,題問個一想在也,時同的寫
。離距有執蘇的樣這得覺不並,是的奇神但
。心安得覺而反
:說話有者作
?呢廠個哪落花會來將,燦燦的來出帶自親監總蘇猜一猜
章44第
。去過金資啟筆一了撥還 ,法想的業創了意同地般蹟奇然居非白,下一了談親父跟扉心開敞,家白趟一了回漾姜帶序霜白 ,展發向方的好往在都乎似事近最
。金資啟的筆大一了套裡手媽老家自從 ,親母了找去就頭轉序霜白 ,來出家白從人兩 ,了應答非白,橋搭線牽忙幫親父請還,援支源資府政要需案專有期後果如 ,法辦想會己自事的金資說 ,了絕拒序霜白
。司公技科家一了冊註名之妻妻以人兩,後來回 ,定搞部全程流套一,證領、誓宣、記登、地落,間時的多天一了花只回來,外國趟一了飛漾姜帶,天二第後然
。司公限有技科療醫生序漾——
。地落品產與向方發研技控把自親,者導主心核的發研療醫生為作時同,理管營運常日與接對資融、劃規略戰司公責負面全,OEC兼人始創為序霜白。元萬0005金資冊註
。撐支技供提發研的序霜白為,程流理料資到建搭型模法算演從,節環個一每的療醫生嵌力能IA將責負,師程工法算演IA兼)OTC(技席首部發研任出 ,漾姜子妻的
。職其司各,確明工分 ,實之業創行,名之妻妻以人兩。能可種一每的法算演懂個一,節細個一每的療醫生懂個一。地落技管個一 ,向方發研管個一
。人個兩的前檯櫃眼一了看頭抬又,下一了頓,上字名個兩”事監“和”人表代定法“在落目,”喜恭“句了說地慣習,來出印打照執業營把員人作工,天那冊註
。然當所理、暱親、弛鬆,扣相然自指十是只,耀炫意刻有沒,起一了在牽候時麼什道知不手的人個兩,邊旁在站漾姜,側前在站序霜白
。繳實,萬千五,零串一那面後金資冊註說別更。回一頭是還這,司公冊註名之妻妻以人個兩但,夥合友朋、兵子父、檔弟兄、店妻夫——冊註司公的樣各種各過見,年幾十了幹廳大政行個這在,人的歲多十四個一是員人作工
。妻妻:字個兩那眼一了看又
。驚震屬純,意惡非並,句一麼這了問識意下卻,人的多是不”……是位二“
”。證的領外國在剛們我,的是“,頭下了點微微,漾姜眼看序霜白

![開局人渣必須從良[快穿] 封面](https://imgs.stonovel.com/images/EVA/BDg8D/BDg8Ds.jpg)






