一、依賴命令
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,感興趣的朋友可以去了解一下。