W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
分布式環(huán)境下,多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作,如果不做互斥,就有可能出現(xiàn)“余額扣成負(fù)數(shù)”,或者“商品超賣(mài)”的情況,如何實(shí)現(xiàn)簡(jiǎn)易分布式鎖,對(duì)分布式環(huán)境下的臨界資源做互斥,是今天將要討論的話(huà)題。
原理:多個(gè)訪問(wèn)方對(duì)同一個(gè)資源進(jìn)行操作,需要進(jìn)行互斥,通常是利用一個(gè)這些訪問(wèn)方同時(shí)能夠訪問(wèn)到的lock來(lái)實(shí)施互斥的。
步驟:
(1)多個(gè)線(xiàn)程同時(shí)搶鎖
(2)只一個(gè)線(xiàn)程搶到,未搶到的阻塞,或下次再來(lái)?yè)?/span>
(3)搶到鎖的線(xiàn)程操作臨界資源
(4)操作完臨界資源后釋放鎖
步驟:
(1)多個(gè)進(jìn)程同時(shí)搶鎖
(2)只一個(gè)進(jìn)程搶到,未搶到的阻塞,或下次再來(lái)?yè)?/span>
(3)搶到鎖的進(jìn)程操作臨界資源
(4)操作完臨界資源后釋放鎖
分布式環(huán)境下,多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作的互斥,例如同一個(gè)uid=123要避免同時(shí)進(jìn)行扣款。
根據(jù)上面的原理,先找一個(gè)多臺(tái)機(jī)器多個(gè)進(jìn)程可以同時(shí)訪問(wèn)到的一個(gè)lock,例如redis。
步驟:
(1)多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)這個(gè)鎖進(jìn)行爭(zhēng)搶,例如在緩存上同時(shí)進(jìn)行set key=123操作
(2)只有一個(gè)進(jìn)程會(huì)搶到這個(gè)鎖,即只有一個(gè)進(jìn)程對(duì)緩存set key=123能夠成功,不成功的進(jìn)程下次再來(lái)?yè)?/span>
(3)搶到鎖的進(jìn)程對(duì)余額進(jìn)行扣減
(4)扣減完成之后釋放鎖,即對(duì)緩存delete key=123
分布式環(huán)境下的互斥,搞定。
文章完了,希望大伙對(duì)分布式鎖原理極其簡(jiǎn)易實(shí)現(xiàn)有個(gè)初步的了解,如果有收獲,幫忙轉(zhuǎn)發(fā)哈,歡迎關(guān)注“架構(gòu)師之路”。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: