Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,
不能保证setnx和expire的原子性。
我们可以使用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=mracale,失效时长100s,不存在时设置
1.1.1.1:6379> set name mracale ex 100 nx
OK
1.1.1.1:6379> get name
"mracale"
1.1.1.1:6379> ttl name
(integer) 94
从上面可以看出,多个命令放在同一个redis连接中并且redis是单线程的,因此上面的操作可以看成setnx和expire的结合体,是原子性的。
网友评论