上QQ阅读APP看书,第一时间看更新
2.6 MSETNX:只在键不存在的情况下,一次为多个字符串键设置值
MSETNX命令与MSET命令一样,都可以对多个字符串键进行设置:
MSETNX key value [key value ...]
MSETNX与MSET的主要区别在于,MSETNX只会在所有给定键都不存在的情况下对键进行设置,而不会像MSET那样直接覆盖键已有的值:如果在给定键当中,即使有一个键已经有值了,那么MSETNX命令也会放弃对所有给定键的设置操作。MSETNX命令在成功执行设置操作时返回1,在放弃执行设置操作时则返回0。
在以下代码中,因为键k4已经存在,所以MSETNX将放弃对键k1、k2、k3和k4进行设置操作:
redis> MGET k1 k2 k3 k4 1) (nil) -- 键k1、 k2和k3都不存在 2) (nil) 3) (nil) 4) "hello world" -- 键k4已存在 redis> MSETNX k1 "one" k2 "two" k3 "three" k4 "four" (integer) 0 -- 因为键k4已存在,所以MSETNX未能执行设置操作 redis> MGET k1 k2 k3 k4 -- 各个键的值没有变化 1) (nil) 2) (nil) 3) (nil) 4) "hello world"
如果只对不存在的键k1、k2和k3进行设置,那么MSETNX可以正常地完成设置操作:
redis> MSETNX k1 "one" k2 "two" k3 "three" (integer) 1 -- 所有给定键都不存在,成功执行设置操作 redis> MGET k1 k2 k3 k4 1) "one" -- 刚刚使用MSETNX设置的3个值 2) "two" 3) "three" 4) "hello world" -- 之前已经存在的键k4的值没有改变
其他信息
复杂度:O(N),其中N为用户给定的字符串键数量。
版本要求:MSETNX命令从Redis 1.0.1开始可用。