一、 Redis分布式鎖實現原理
SETNX key value //如果key不存在,則創建並賦值 EXPIRE key seconds //設置key的生存時間,當key過期(生存時間為0),會自動刪除
存在風險:SETNX和EXPIRE 為兩個指令,如果設置了SETNX后程序崩潰,EXPIRE未成功執行則會出現資源鎖死的情況。
二、針對該問題,redis 在2.6.12版本過后增加新的解決方案
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
EX seconds:將鍵的過期時間設置為 seconds 秒。 SET key value EX seconds 等同於 SETEX key seconds value
PX millisecounds:將鍵的過期時間設置為 milliseconds 毫秒。 SET key value PX milliseconds 等同於 PSETEX key milliseconds value
NX:只在鍵不存在的時候,才對鍵進行設置操作。 SET key value NX 等同於 SETNX key value
XX:只在鍵已經存在的時候,才對鍵進行設置操作
三、例子
set name zhangsan EX 10 NX
當 "name" 不存在時進行設置,同時設置超時時間為10s(將SETNX和EXPIRE合二為一)
SET操作成功后,返回的是OK,失敗返回NIL
