Redis MSETNX 命令用于同时设置 Redis 中一个或多个 KEY-value 对,当且仅当所有给定 KEY 都不存在。即使只有一个给定 KEY 已存在, MSETNX 也会拒绝执行所有给定 KEY 的设置操作。
MSETNX 是原子性的,因此它可以用作设置多个不同 KEY 表示不同字段(field)的唯一性逻辑对象,所有字段要么全被设置,要么全不被设置。
192.168.98.70:6379> MSETNX KEY value [KEY value ...]
参数 | 作用 |
---|---|
KEY | 要设置的 KEY |
VALUE | 要设置的 VALUE |
当所有 KEY 都成功设置,返回 1 。如果所有给定 KEY 都设置失败(至少有一个 KEY 已经存在),那么返回 0 。
O(N), N 为要设置的 KEY 数量。
>= 1.0.1
当 KEY 都不存在时,设置成功
# KEY 都不存在
192.168.98.70:6379> EXISTS haicoder.net haicoder hicoder
(integer) 0
192.168.98.70:6379> MSETNX haicoder.net Redis haicoder Mongo hicoder Mysql
(integer) 1
192.168.98.70:6379> MGET haicoder.net haicoder hicoder
1) "Redis"
2) "Mongo"
3) "Mysql"
192.168.98.70:6379> DEL haicoder.net haicoder hicoder
(integer) 3
我们首先,使用 EXISTS 命令,判断键 haicoder.net、键 haicoder 和键 hicoder 的值都不存在。接着,使用 MSET 命令,批量设置键 haicoder.net 、键 haicoder 和键 hicoder 的值,因为所有键都不存在,所以设置成功。
最后,使用 MGET 命令,批量获取刚设置的键 haicoder.net 、键 haicoder 和键 hicoder 的值。
当 KEY 存在时,所有键设置失败
# KEY 存在
192.168.98.70:6379> SET haicoder.net Redis
OK
192.168.98.70:6379> MSETNX haicoder.net Redis1 haicoder Mongo
(integer) 0
192.168.98.70:6379> MGET haicoder.net haicoder
1) "Redis"
2) (nil)
192.168.98.70:6379> DEL haicoder.net haicoder
(integer) 1
我们首先,使用 SET 命令,设置 haicoder.net 的值为 Redis。接着,使用 MSETNX 命令,批量设置键 haicoder.net 、和键 haicoder 的值,因为键 haicoder.net 已经存在,所以所有键都设置失败。
最后,使用 MGET 命令,批量获取刚设置的键 haicoder.net 、和键 haicoder 的值,键 haicoder.net 的值还是原来的 Redis,键 haicoder 为 nil。
Redis MSETNX 命令用于同时设置 Redis 中一个或多个 KEY-value 对,当且仅当所有给定 KEY 都不存在。Redis MSETNX 命令语法:
192.168.98.70:6379> MSETNX KEY value [KEY value ...]