Redis MSETNX命令

Redis MSETNX命令教程

Redis MSETNX 命令用于同时设置 Redis 中一个或多个 KEY-value 对,当且仅当所有给定 KEY 都不存在。即使只有一个给定 KEY 已存在, MSETNX 也会拒绝执行所有给定 KEY 的设置操作。

MSETNX 是原子性的,因此它可以用作设置多个不同 KEY 表示不同字段(field)的唯一性逻辑对象,所有字段要么全被设置,要么全不被设置。

Redis MSETNX命令语法

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 都不存在时,设置成功

# 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 存在时,所有键设置失败

# 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 MSETNX 命令用于同时设置 Redis 中一个或多个 KEY-value 对,当且仅当所有给定 KEY 都不存在。Redis MSETNX 命令语法:

192.168.98.70:6379> MSETNX KEY value [KEY value ...]