Redis使用手册
上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、 k2k3都不存在
        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开始可用。