redis實現簡易分佈式鎖

一、依賴命令

SET key value [EX seconds] [PX milliseconds] [NX|XX]

注:這是redis後面版本擴展了set指令(可以替代setnx、setex等),也就是簡單的將set key value擴展了幾個參數,並且保證原子操作

二、解釋

key:字面意思

value:字面意思

EX/PX:用於支持設置key的過期時間,這兩個參數表示單位,EX:表示秒,PX:表示毫秒

NX/XX:限制set行爲:

             NX:表示當key不存在時纔會成功設置新值,並且返回ok,否則失敗

             XX:表示當key存在時纔會成功設置新值,並且返回ok,否則失敗

三、使用

redis會保證此操作爲原子操作,賦值和設置超時要麼都成功,要麼都失敗。所以可以依賴此特性,實現分佈式鎖。

例子:set lock_key lock_value NX EX 20

上述例子的功能爲:嘗試獲取lock_key鎖,並將值設置爲lock_value(用作分佈式鎖時,可以將value設置成競爭鎖的id,具體看需求),並且20秒後自動釋放

四、總結

單單依賴該命令實現的分佈式鎖有很大的侷限性,比如加鎖只能在一個節點,可能會出現主從切換丟失鎖的情況:在master鎖定成功之後,同步到slave之前發生了主從切換。這個時候可以使用Redlock,感興趣的朋友可以去了解一下。

附:redis簡易手冊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章