日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一分钟实现分布式锁

發布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一分钟实现分布式锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、緣起

分布式環境下,多臺機器上多個進程對一個數據進行操作,如果不做互斥,就有可能出現“余額扣成負數”,或者“商品超賣”的情況,如何實現簡易分布式鎖,對分布式環境下的臨界資源做互斥,是今天將要討論的話題。

二、互斥原理

原理:多個訪問方對同一個資源進行操作,需要進行互斥,通常是利用一個這些訪問方同時能夠訪問到的lock來實施互斥的。

例子1:同一個進程內,多個線程的互斥,典型的場景是生產者消費者對同一個queue進行操作時的互斥

方案:設定一個所有線程能夠訪問到的lock實施互斥

步驟:

(1)多個線程同時搶鎖

(2)只一個線程搶到,未搶到的阻塞,或下次再來搶

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

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

例子2:同一個操作系統上,多個進程的互斥,典型的場景是手機上多個APP對同一個文件進行寫入互斥

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

步驟:

(1)多個進程同時搶鎖

(2)只一個進程搶到,未搶到的阻塞,或下次再來搶

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

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

三、分布式環境下多進程互斥

分布式環境下,多臺機器上多個進程對一個數據進行操作的互斥,例如同一個uid=123要避免同時進行扣款。

根據上面的原理,先找一個多臺機器多個進程可以同時訪問到的一個lock,例如redis。

步驟:

(1)多臺機器上多個進程對這個鎖進行爭搶,例如在緩存上同時進行set key=123操作

(2)只有一個進程會搶到這個鎖,即只有一個進程對緩存set key=123能夠成功,不成功的進程下次再來搶

(3)搶到鎖的進程對余額進行扣減

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

分布式環境下的互斥,搞定。

author:?58沈劍

from:?http://zhuanlan.51cto.com/art/201612/524914.htm

總結

以上是生活随笔為你收集整理的一分钟实现分布式锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。