SETNX key value
将key
设置值为value
,如果key
不存在,这种情况下等同SET命令。 当key
存在时,什么也不做。SETNX
是”SET if Not eXists”的简写。
返回值
Integer reply, 特定值:
1
如果key被设置了0
如果key没有被设置
##例子
redis> SETNX mykey "Hello"
(integer) 1
redis> SETNX mykey "World"
(integer) 0
redis> GET mykey
"Hello"
redis>
如果客户端获取锁成功,那么setnx返回1,否则返回0;
为防止出现死锁,需要SETNX 时设置有效时间,已防止迟持有锁的客户端崩溃时,无法释放锁,形如:
SETNX lock.foo <current Unix time + lock timeout + 1>
为了使这种加锁算法更加的健壮,持有锁的客户端应该总是要检查是否超时,保证使用DEL
释放锁之前不会过期,因为客户端故障的情况可能是复杂的,不止是崩溃,还会阻塞一段时间,阻止一些操作的执行,并且在阻塞恢复后尝试执行DEL
(此时,该LOCK已经被其他客户端所持有)