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 设置的三个值
- 2) "two"
- 3) "three"
- 4) "hello world" -- 之前已经存在的键 k4 的值没有改变
其他信息
属性 | 值 |
---|---|
复杂度 | O(N),其中 N 为用户给定的字符串键数量。 |
版本要求 | MSETNX 命令从 Redis 1.0.1 开始可用。 |