自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一分鐘實(shí)現(xiàn)分布式鎖

開(kāi)發(fā) 開(kāi)發(fā)工具 分布式
分布式環(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á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)境下的臨界資源做互斥,是今天將要討論的話題。

[[178861]]

二、互斥原理

原理:多個(gè)訪問(wèn)方對(duì)同一個(gè)資源進(jìn)行操作,需要進(jìn)行互斥,通常是利用一個(gè)這些訪問(wèn)方同時(shí)能夠訪問(wèn)到的lock來(lái)實(shí)施互斥的。

例子1:同一個(gè)進(jìn)程內(nèi),多個(gè)線程的互斥,典型的場(chǎng)景是生產(chǎn)者消費(fèi)者對(duì)同一個(gè)queue進(jìn)行操作時(shí)的互斥

同一個(gè)進(jìn)程內(nèi),多個(gè)線程的互斥

方案:設(shè)定一個(gè)所有線程能夠訪問(wèn)到的lock實(shí)施互斥

所有線程能夠訪問(wèn)到的lock實(shí)施互斥

步驟:

(1)多個(gè)線程同時(shí)搶鎖

(2)只一個(gè)線程搶到,未搶到的阻塞,或下次再來(lái)?yè)?/p>

(3)搶到鎖的線程操作臨界資源

(4)操作完臨界資源后釋放鎖

例子2:同一個(gè)操作系統(tǒng)上,多個(gè)進(jìn)程的互斥,典型的場(chǎng)景是手機(jī)上多個(gè)APP對(duì)同一個(gè)文件進(jìn)行寫(xiě)入互斥

同一個(gè)操作系統(tǒng)上,多個(gè)進(jìn)程的互斥

方案:設(shè)定一個(gè)所有進(jìn)程能夠訪問(wèn)到的lock實(shí)施互斥(例如文件inode,OS幫我們做了)

所有進(jìn)程能夠訪問(wèn)到的lock實(shí)施互斥

步驟:

(1)多個(gè)進(jìn)程同時(shí)搶鎖

(2)只一個(gè)進(jìn)程搶到,未搶到的阻塞,或下次再來(lái)?yè)?/p>

(3)搶到鎖的進(jìn)程操作臨界資源

(4)操作完臨界資源后釋放鎖

三、分布式環(huán)境下多進(jìn)程互斥

分布式環(huán)境下多進(jìn)程互斥

分布式環(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。

分布式環(huán)境下多進(jìn)程互斥

步驟:

(1)多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)這個(gè)鎖進(jìn)行爭(zhēng)搶?zhuān)缭诰彺嫔贤瑫r(shí)進(jìn)行set key=123操作

(2)只有一個(gè)進(jìn)程會(huì)搶到這個(gè)鎖,即只有一個(gè)進(jìn)程對(duì)緩存set key=123能夠成功,不成功的進(jìn)程下次再來(lái)?yè)?/p>

(3)搶到鎖的進(jìn)程對(duì)余額進(jìn)行扣減

(4)扣減完成之后釋放鎖,即對(duì)緩存delete key=123

分布式環(huán)境下的互斥,搞定。

【本文為51CTO專(zhuān)欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

責(zé)任編輯:趙寧寧 來(lái)源: 架構(gòu)師之路
相關(guān)推薦

2018-06-28 14:00:01

分布式集群架構(gòu)

2025-03-11 08:50:00

CASID分布式

2019-06-21 10:00:42

微服務(wù)分布式架構(gòu)

2017-03-30 19:28:26

HBase分布式數(shù)據(jù)

2018-07-31 15:05:51

Java公平鎖線程

2020-05-21 19:46:19

區(qū)塊鏈數(shù)字貨幣比特幣

2018-06-26 05:23:19

線程安全函數(shù)代碼

2017-07-06 08:12:02

索引查詢(xún)SQL

2022-07-18 06:16:07

單點(diǎn)登錄系統(tǒng)

2018-07-31 16:10:51

Redo Undo數(shù)據(jù)庫(kù)數(shù)據(jù)

2017-02-21 13:00:27

LoadAverage負(fù)載Load

2020-10-28 11:00:53

Scrapy爬蟲(chóng)Python

2016-09-12 17:28:45

云存儲(chǔ)應(yīng)用軟件存儲(chǔ)設(shè)備

2018-12-12 22:51:24

Java包裝語(yǔ)言

2020-07-09 07:37:06

數(shù)據(jù)庫(kù)Redis工具

2020-07-17 07:44:25

云計(jì)算邊緣計(jì)算IT

2011-02-21 17:48:35

vsFTPd

2017-12-26 16:24:36

接口代碼數(shù)據(jù)

2017-03-27 23:22:23

數(shù)據(jù)庫(kù)列式存儲(chǔ)

2015-11-12 10:32:40

GitHub控制系統(tǒng)分布式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)