Redis的setnx命令是當(dāng)key不存在時(shí)設(shè)置key,但setnx不能同時(shí)完成expire設(shè)置失效時(shí)長(zhǎng)岔帽,
不能保證setnx和expire的原子性。
我們可以使用set命令完成setnx和expire的操作导绷,并且這種操作是原子操作犀勒。
下面是set命令的可選項(xiàng):
set key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds:設(shè)置失效時(shí)長(zhǎng),單位秒
PX milliseconds:設(shè)置失效時(shí)長(zhǎng)妥曲,單位毫秒
NX:key不存在時(shí)設(shè)置value贾费,成功返回OK,失敗返回(nil)
XX:key存在時(shí)設(shè)置value檐盟,成功返回OK褂萧,失敗返回(nil)
案例:設(shè)置name=mracale,失效時(shí)長(zhǎng)100s葵萎,不存在時(shí)設(shè)置
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
從上面可以看出导犹,多個(gè)命令放在同一個(gè)redis連接中并且redis是單線程的,因此上面的操作可以看成setnx和expire的結(jié)合體羡忘,是原子性的谎痢。