Redis的setnx命令:官方解释如下
Available since 1.0.0.
Time complexity: O(1)
Set key
to hold string value
if key
does not exist. In that case, it is equal to SET. When key
already holds a value, no operation is performed. SETNX is short for "SET if Not eXists".
大致意思:将key
设置值为value
,如果key
不存在,这种情况下等同SET命令。 当key
存在时,什么也不做。SETNX
是”SET if Not eXists”的简写。
Redis
的setnx
命令,不能同时完成expire
设置失效时长,不能保证setnx
和expire
的原子性。
如果在setnx之后执行expire 之前进程意外crash或者要重启维护,岂不是歇菜了
但是我们可以使用set
命令完成setnx
和expire
的操作,并且这种操作是原子操作。
下面是set
命令的可选项:
set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:设置失效时长,单位秒
PX milliseconds:设置失效时长,单位毫秒
NX:key不存在时设置value,成功返回OK,失败返回(nil)
XX:key存在时设置value,成功返回OK,失败返回(nil)
案例:设置name=liuxinglin,失效时长100s,不存在时设置
1.1.1.1:6379> set name liuxinglin ex 100 nx
OK
1.1.1.1:6379> get name
"liuxinglin"
1.1.1.1:6379> ttl name
(integer) 94