Redis ZADD命令

Redis ZADD命令教程

Redis 的 ZADD 命令用于将一个或多个 member 元素及其 score 值加入到 有序集 KEY 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

如果 KEY 不存在,则创建一个空的有序集并执行 ZADD 操作。当 KEY 存在但不是有序集类型时,返回一个错误。

score 值可以是整数值或双精度浮点数。在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

Redis ZADD命令详解

语法

192.168.98.70:6379> ZADD KEY score member [[score member] [score member] ...]

参数

参数 描述
KEY 要添加的有序集合的键。
score 要添加的有序集合的分数。
member 要添加的有序集合的成员。

返回值

被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

时间复杂度

O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。

可用版本

>= 1.2.0

案例

KEY不存在,添加单个元素

使用 ZADD 命令,向集合添加单个元素

192.168.98.70:6379> EXISTS haicoder (integer) 0 192.168.98.70:6379> ZADD haicoder 100 Redis (integer) 1 192.168.98.70:6379> ZADD haicoder 200 Mysql (integer) 1 192.168.98.70:6379> ZADD haicoder 50 Mongo (integer) 1 192.168.98.70:6379> ZRANGE haicoder 0 -1 WITHSCORES 1) "Mongo" 2) "50" 3) "Redis" 4) "100" 5) "Mysql" 6) "200" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 EXISTS 命令,判断键为 haicoder 的集合不存在。使用 ZADD 命令,向键为 haicoder 的集合插入元素 Redis,且分数为 100。

接着,我们使用 ZADD 命令,向键为 haicoder 的集合插入元素 Mysql,且分数为 200。使用 ZADD 命令,向键为 haicoder 的集合插入元素 Mongo,且分数为 50。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合的所有元素,并打印出其分数。

KEY不存在,添加多个元素

使用 ZADD 命令,可以同时向集合添加多个元素

192.168.98.70:6379> EXISTS haicoder (integer) 0 192.168.98.70:6379> ZADD haicoder 100 Redis 50 Mongo 200 Mysql 10 SqlServer (integer) 4 192.168.98.70:6379> ZRANGE haicoder 0 -1 WITHSCORES 1) "SqlServer" 2) "10" 3) "Mongo" 4) "50" 5) "Redis" 6) "100" 7) "Mysql" 8) "200" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 EXISTS 命令,判断键为 haicoder 的集合不存在。

接着,我们使用 ZADD 命令,同时向键为 haicoder 的集合插入元素 Redis,分数为 100,元素 Mongo,分数为 50,元素 Mysql,分数为 200,元素 SqlServer,分数为 10。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合的所有元素,并打印出其分数。

插入重复元素,分数不变

插入重复元素,分数不变,插入失败

192.168.98.70:6379> EXISTS haicoder (integer) 0 192.168.98.70:6379> ZADD haicoder 100 Redis (integer) 1 192.168.98.70:6379> ZADD haicoder 200 Mysql (integer) 1 192.168.98.70:6379> ZADD haicoder 100 Redis (integer) 0 192.168.98.70:6379> ZRANGE haicoder 0 -1 WITHSCORES 1) "Redis" 2) "100" 3) "Mysql" 4) "200" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 EXISTS 命令,判断键为 haicoder 的集合不存在。使用 ZADD 命令,向键为 haicoder 的集合插入元素 Redis,分数为 100。

接着,我们使用 ZADD 命令,向键为 haicoder 的集合插入元素 Mysql,分数为 200。

使用 ZADD 命令,向键为 haicoder 的集合插入元素 Redis,分数为 100,此时元素和元素的分数都与集合中的元素相同,所以插入失败。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合的所有元素,并打印出其分数。

插入重复元素,分数改变

插入重复元素,分数改变,插入成功,分数被更新

192.168.98.70:6379> EXISTS haicoder (integer) 0 192.168.98.70:6379> ZADD haicoder 100 Redis (integer) 1 192.168.98.70:6379> ZADD haicoder 200 Mysql (integer) 1 192.168.98.70:6379> ZADD haicoder 300 Redis (integer) 0 192.168.98.70:6379> ZRANGE haicoder 0 -1 WITHSCORES 1) "Mysql" 2) "200" 3) "Redis" 4) "300" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 EXISTS 命令,判断键为 haicoder 的集合不存在。使用 ZADD 命令,向键为 haicoder 的集合插入元素 Redis,分数为 100。

接着,我们使用 ZADD 命令,向键为 haicoder 的集合插入元素 Mysql,分数为 200。

使用 ZADD 命令,向键为 haicoder 的集合插入元素 Redis,分数为 300,此时元素已经在集合中存在但分数被更新了。

最后,我们使用 ZRANGE 命令,获取键为 haicoder 的集合的所有元素,并打印出其分数,此时原来 Redis 元素的分数已被更新。

KEY为非集合类型

KEY 为非集合类型,返回错误

192.168.98.70:6379> SET haicoder Redis OK 192.168.98.70:6379> TYPE haicoder string 192.168.98.70:6379> ZADD haicoder 10 Mongo (error) WRONGTYPE Operation against a key holding the wrong kind of value 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SET 命令,设置键 haicoder 的值为 Redis。接着,我们使用 TYPE 命令,获取键 haicoder 的类型,返回了 string。

最后,我们使用 ZADD 命令,向键为 haicoder 的非集合类型插入值,报错。

Redis ZADD命令总结

Redis 的 ZADD 命令用于将一个或多个 member 元素及其 score 值加入到有序集 KEY 当中。Redis ZADD 命令语法:

192.168.98.70:6379> ZADD KEY score member [[score member] [score member] ...]