什么是鎖

今天要談的是如何在分布式環(huán)境下實現(xiàn)一個全局鎖,在開始之前先說說非分布式下的鎖:

  • 單機(jī) – 單進(jìn)程程序使用互斥鎖mutex,解決多個線程之間的同步問題
  • 單機(jī) – 多進(jìn)程程序使用信號量sem,解決多個進(jìn)程之間的同步問題

這里同步的意思很簡單:某個運行者,用某個工具,保障某段代碼,獨占的運行,直到釋放。

分布式鎖解決的是 多臺機(jī)器 – 多個進(jìn)程 之間的同步問題,因為不同的機(jī)器之間mutex/sem無法使用。不過要注意:即便如此,一個進(jìn)程內(nèi)多個線程之間仍舊建議使用mutex同步,盡量減少對分布式鎖服務(wù)造成不必要的負(fù)擔(dān)。

redis分布式鎖

首先呢,基于redis的分布式鎖并不是一個坊間方案,而是redis官網(wǎng)提供的解決思路并且有若干語言的實現(xiàn)版本直接使用。

今天要做的,首先是閱讀官方的文檔(中文點我,英文點我),有些地方講的不怎么清晰,所以我接下來會分析PHP版本的代碼,應(yīng)該可以解答你的主要疑惑。

分析代碼

首先打開代碼:https://github.com/ronnylt/redlock-php/blob/master/src/RedLock.php,這是PHP的官方推薦實現(xiàn)版本,它基于composer安裝(不懂composer可以點我)。

構(gòu)造函數(shù)