Redis 学习笔记四 命令三

Redis 学习笔记四 命令三

  • Redis 集合(Set)
    • Redis Sadd 命令
    • Redis Scard 命令
    • Redis Sdiff 命令
    • Redis Sdiffstore 命令
    • Redis Sinter 命令
    • Redis Sinterstore 命令
    • Redis Sismember 命令
    • Redis Smembers 命令
    • Redis Smove 命令
    • Redis Spop 命令
    • Redis Srandmember 命令
    • Redis Srem 命令
    • Redis Sunion 命令
    • Redis Sunionstore 命令
    • Redis Sscan 命令
  • Redis 有序集合(sorted set)
    • Redis Zadd 命令
    • Redis Zcard 命令
    • Redis Zcount 命令
    • Redis Zincrby 命令
    • Redis Zinterstore 命令
    • Redis Zlexcount 命令
    • Redis Zrange 命令
    • Redis Zrangebylex 命令
    • Redis Zrangebyscore 命令
    • Redis Zrank 命令
    • Redis Zrem 命令
    • Redis Zremrangebylex 命令
    • Redis Zremrangebyrank 命令
    • Redis Zremrangebyscore 命令
    • Redis Zrevrange 命令
    • Redis Zrevrangebyscore 命令
    • Redis Zrevrank 命令
    • Redis Zscore 命令
    • Redis Zunionstore 命令
    • Redis Zscan 命令

Redis 集合(Set)

Redis 的Set 是 String 类型的无序集合。集合成员时唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员是数为232-1 (4294967295, 每个集合可存储40多亿个成员)。

实例

redis 127.0.0.1:6379> SADD w3ckey redis
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS w3ckey

1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们用过 SADD 命令向名为 w3ckey 的集合插入的三个元素。

Redis Sadd 命令

Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

加入集合key 不存在,则创建一个只包含添加的元素做成员的集合

当集合 key 不是集合类型时,返回一个错误

注意:在Redis 2.4 版本以前, Sadd 只接受单个成员值。

语法

redis Sadd 命令基本语法如下:

redis 127.0.0.1:6379> SADD KEY_NAME VALUE1..VALUEN

可用版本
>= 1.0.0

返回值

被添加到集合中的新元素的数量,不包括被忽略的元素。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "foo"

Redis Scard 命令

Redis Scard 命令返回集合中元素的数量。

语法

redis Scard 命令基本语法如下:

redis 127.0.0.1:6379> SCARD KEY_NAME 

可用版本
>= 1.0.0

返回值、

集合的数量。当集合 key 不存在时,返回 0 。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "hello"
(integer) 0
redis 127.0.0.1:6379> SCARD myset
(integer) 2

Redis Sdiff 命令

Redis Sdiff 命令返回给定集合之间的差集。不存在的集合 key 视为空集。

语法

redis Sdiff 命令基本语法如下:

redis 127.0.0.1:6379> SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN 

可用版本
>= 1.0.0

返回值

包含差集成员的列表

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SDIFF myset myset2
1) "foo"
2) "bar"

Redis Sdiffstore 命令

Redis Sdiffstore 命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖

语法

redis Sdffstore 命令基本语法如下:

redis 127.0.0.1:6379> SDIFFSTORE DESTINATION_KEY KEY1..KEYN 

可用版本
>= 1.0.0

返回值

结果集中的元素数量。

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SDIFFSTORE destset myset myset2
(integer) 2
redis 127.0.0.1:6379> SMEMBERS destset
1) "foo"
2) "bar"

Redis Sinter 命令

Redis Sinter 命令返回给定所有给定集合的交集。不存在的集合key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算法则)

语法

redis Sinter 命令基本语法如下:

redis 127.0.0.1:6379> SINTER KEY KEY1..KEYN 

可用版本
>= 1.0.0

实例

redis 127.0.0.1:6379> SADD myset "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SINTER myset myset2
1) "hello"

Redis Sinterstore 命令

Redis Sinterstore 命令将给定集合之间的交集存储在指定的集合中,如果指定的集合已经存在,则将其覆盖。

语法

redis Sinterstore 命令基本语法如下:

redis 127.0.0.1:6379> SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN 

可用版本
>= 1.0.0

返回值

交集成员的列表

实例

实例
redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "foo"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "world"
(integer) 1
redis 127.0.0.1:6379> SINTERSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"

Redis Sismember 命令

Redis Sismember 命令判断成员元素是否是集合的成员。

语法

redis Sismember 命令基本语法如下:

redis 127.0.0.1:6379> SISMEMBER KEY VALUE 

可用版本
>= 1.0.0

返回值

如果成员元素是集合的成员,返回 1 。如果成员元素不是集合的成员,或 key 不存在,返回 0 。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0

Redis Smembers 命令

Redis Smembers 命令返回集合中的所有的成员,不存在的集合 key 被视为空集合。

语法

redis Smembers 命令基本语法如下:

redis 127.0.0.1:6379> SMEMBERS KEY VALUE 

可用版本
>= 1.0.0

返回值

集合中的所有成员

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"

Redis Smove 命令

Redis Smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。

SMOVE 是原子性操作。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则,member 元素从 source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含 memer 元素时,smove 美玲只是简单地将 source 集合中的 member 元素删除。

当source 或 destination 不是集合类型时,返回一个错误。

语法

redis smove 命令基本语法如下:

可用版本
>= 1.0.0

返回值

如果成员元素被成功移除,返回 1 。 如果成员元素不是 source 成员,并且没有任何操作对 destination 集合执行,那么返回0 。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "foo"
(integer) 1
redis 127.0.0.1:6379> SMOVE myset1 myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
redis 127.0.0.1:6379> SMEMBERS myset2
1) "foo"
2) "bar"

Redis Spop 命令

Redis Spop 命令用于移除并返回集合中的一个随机元素。

语法

redis Spop 命令基本语法如下:

redis 127.0.0.1:6379> SPOP KEY 

可用版本
>= 1.0.0

返回值

被移除的随机元素,当集合不存在或是空集时,返回 nil。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SPOP myset1
"bar"
redis 127.0.0.1:6379> SMEMBERS myset1
1) "Hello"
2) "world"

Redis Srandmember 命令

Redis Srandmember 命令用于返回集合中的一个随机元素。

从 Redis 2.6 版本开始,Srandmember 命令接受可选的 count 参数:

  • 如果 count为正数,且小于集合正数,那么命令返回一个包含 count个元素的数组,数组中的元素各不相同。如果 count大于等于集合,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

该操作和 Spop ,但 Spop 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。

语法

redis Srandmember 命令基本语法如下:

redis 127.0.0.1:6379> SRANDMEMBER KEY [count]

可用版本
>= 1.0.0

返回值

只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SRANDMEMBER myset1
"bar"
redis 127.0.0.1:6379> SRANDMEMBER myset1 2
1) "Hello"
2) "world"

Redis Srem 命令

Redis Srem 命令用于移除集合中的一个或多个元素,不存在的成员元素会被忽略。

当key 不是集合类型,返回一个错误。

在 Redis 2.4 版本以前,Srem 只接受单个成员值。

语法

redis Srem 命令基本语法如下:

redis 127.0.0.1:6379> SREM KEY MEMBER1..MEMBERN

可用版本
>= 1.0.0

返回值

被成功移除的元素的数量,不包括被忽略的元素。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SREM myset1 "foo"
(integer) 0
redis 127.0.0.1:6379> SMEMBERS myset1
1) "bar"
2) "world"

Redis Sunion 命令

Redis Sunion 命令返回给定集合的并集。不存在的集合 key 被视为空集。

语法

redis Sunion 命令基本语法如下:

redis 127.0.0.1:6379> SUNION KEY KEY1..KEYN

可用版本
>= 1.0.0

返回值

并集成员的列表

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SUNION myset1 myset2
1) "bar"
2) "world"
3) "hello"
4) "foo"

Redis Sunionstore 命令

Redis Sunionstore 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将被覆盖

语法

redis Sunionstore 命令基本语法如下:

redis 127.0.0.1:6379> SUNIONSTORE DESTINATION KEY KEY1..KEYN

可用版本
>= 1.0.0

返回值

结果集中的元素数量。

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "world"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset2 "bar"
(integer) 1
redis 127.0.0.1:6379> SUNIONSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "bar"
2) "world"
3) "hello"
4) "foo"

Redis Sscan 命令

Redis Sscan 命令用于迭代集合键中的元素。

语法

redis Sscan 命令基本语法如下:

redis 127.0.0.1:6379> SSCAN KEY cursor [MATCH pattern] [COUNT count]

可用版本
>= 1.0.0

返回值

数组列表

实例

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "hi"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> sscan myset1 0 match h*
1) "0"
2) 1) "hello"
   2) "h1"

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。 redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为 232-1(4294967295, 每个集合可存储40多亿个成员)。

实例

redis 127.0.0.1:6379> ZADD w3ckey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE w3ckey 0 10 WITHSCORES

1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

以上实例中我们通过命令 ZADD 向 redis 的有序集合中添加了三个值并关联上分数。

Redis Zadd 命令

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

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

分数值可以是 整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 Zadd 操作。

当 key 存在但不是有序集类型时,返回一个错误。

注意:在 Redis 2.4 版本以前,Zadd 每次只能添加一个元素。

语法

redis Zadd 命令基本语法如下:

redis 127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

可用版本
>= 1.2.0

返回值

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

实例

redis 127.0.0.1:6379> ZADD myset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "hello"
2) "1"
3) "foo"
4) "1"
5) "world"
6) "2"
7) "bar"
8) "3"

Redis Zcard 命令

RedisZcard 命令用于计算机和中元素的数量

语法

redis Zcard 命令基本语法如下:

redis 127.0.0.1:6379> ZCARD KEY_NAME

可用版本
>= 1.2.0

返回值

当 key存在且有序集类型时,返回有序集的技术。当 key 不存在时,返回 0 。

实例

redis 127.0.0.1:6379> ZADD myset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCARD myzset
(integer) 4

Redis Zcount 命令

Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。

语法

redis Zcount 命令基本语法如下:

redis 127.0.0.1:6379> ZCOUNT key min max

可用版本
>= 2.0.0

返回值

分数值在min 和max 之间的成员的数量。

实例

redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4

Redis Zincrby 命令

Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment

可以通过传递一个负数值 increment ,让分数减去相应的值,比如 Zincrby key -5 member ,就是让 member 的 score 值减去5

当 key 不存在,或分数不是key 的成员时, Zincrby key increment member 等同于 ZADD key increment member 。

当 key 不是有序集合类型时,返回一个错误。

分数值可以是整数值或双精度浮点数。

语法

redis Zincrby 命令基本语法如下:

redis 127.0.0.1:6379> ZINCRBY key increment member

可用版本
>= 1.2.0

返回值

member成员的新分数值,以字符串形式表示。

实例

redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZINCRBY myzset 2 "hello"
(integer) 3
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "foo"
2) "2"
3) "hello"
4) "3"

Redis Zinterstore 命令

Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)存储到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员的分数值之和。

语法

redis Zinterstore 命令基本语法如下:

redis 127.0.0.1:6379> ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

可用版本
>= 2.0.0

返回值

保存到目标结果集的成员数量。

实例

# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1

# 另一个有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1

# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3

# 显示有序集内所有成员及其分数值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES     
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

Redis Zlexcount 命令

Redis Zlexcount 命令在计算有序集合中指定字典区间内成员数量。

语法

redis Zlexcount 命令基本语法如下:

redis 127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX

可用版本
>= 2.8.9

返回值

指定区间内的成员数量

实例

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5

Redis Zrange 命令

Redis Zrange 返回有序集中,指定区间内的成员。

其中成员的位置按分数值递增(从小到大)来排序。

具有相同分数值的成员按字典序(lexicographical order)来排列。

如果你需要成员按

值递减(从大到小)来排列看,请使用 Zrevrange 命令。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

语法

redis Zrange 命令基本语法如下:

redis 127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]

可用版本
>= 1.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis 127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES              # 显示有序集下标区间 1 至 2 的成员
1) "tom"
2) "5000"
3) "boss"
4) "10086"

redis 127.0.0.1:6379> ZRANGE salary 0 200000 WITHSCORES         # 测试 end 下标超出最大下标时的情况
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 200000 3000000 WITHSCORES                  # 测试当给定区间不存在于有序集时的情况
(empty list or set)

Redis Zrangebylex 命令

Redis Zrangebylex 通过字典区间返回有序集合的成员。

语法

redis Zrange 命令基本语法如下:

redis 127.0.0.1:6379> ZRANGEBYLEX key min max [LIMIT offset count]

可用版本
>= 2.8.9

返回值

指定区间内的元素列表

实例

redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
redis> 

Redis Zrangebyscore 命令

Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

具有相同分数值的成员按字典来排列(该属性是有序集提供的,不需要额外的计算)。

默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间(小于或大于))。

举个例子

ZRANGEBYSCORE zset (1 5

返回所有符合条件 1< score <=.5

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZADD salary 2500 jack                        # 测试数据
(integer) 0
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 0
redis 127.0.0.1:6379> ZADD salary 12000 peter
(integer) 0

redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf               # 显示整个有序集
1) "jack"
2) "tom"
3) "peter"

redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES    # 显示整个有序集及成员的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"

redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES    # 显示工资 <=5000 的所有成员
1) "jack"
2) "2500"
3) "tom"
4) "5000"

redis 127.0.0.1:6379> ZRANGEBYSCORE salary (5000 400000            # 显示工资大于 5000 小于等于 400000 的成员
1) "peter"

Redis Zrank 命令

Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

语法

redis Zrank 命令基本语法如下:

redis 127.0.0.1:6379> ZRANK key member 

可用版本
>= 2.0.0

返回值

如果成员是有序集 key 的成员,返回 member 的排名。如果成员不是有序集 key 的成员,返回 nil 。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES        # 显示所有成员及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"

redis 127.0.0.1:6379> ZRANK salary tom                     # 显示 tom 的薪水排名,第二
(integer) 1

Redis Zrem 命令

Redis Zrem 命令用于移除有序集汇总的一个或多个成员,不能存在的成员将被忽略。

当 key 存在但不是有序集类型时,返回一个错误。

注意: 在 Redis 2.4 版本以前,Zrem 每次只能删除一个元素。

语法

redis Zrem 命令基本语法如下:

redis 127.0.0.1:6379> ZREM key member [member ...]

可用版本
>= 1.2.0

返回值

被成功移除的成员的数量,不包括被忽略的成员。

实例

# 测试数据

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 移除单个元素

redis 127.0.0.1:6379> ZREM page_rank google.com
(integer) 1

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"


# 移除多个元素

redis 127.0.0.1:6379> ZREM page_rank baidu.com bing.com
(integer) 2

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)


# 移除不存在元素

redis 127.0.0.1:6379> ZREM page_rank non-exists-element
(integer) 0

Redis Zremrangebylex 命令

Redis Zremrangebylex 命令用于移除有序集合中给定的字典区间的所有成员。

语法

redis Zremragebylex 命令节本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYLEX key min max

可用版本
>= 2.8.9

返回值

被成功移除的成员的数量,不包括被忽略的成员。

实例

redis 127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
 2) "aaaa"
 3) "alpha"
 4) "b"
 5) "c"
 6) "d"
 7) "e"
 8) "foo"
 9) "zap"
10) "zip"
redis 127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [foo
(integer) 6
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
redis> 

Redis Zremrangebyrank 命令

Redis Zremrangebyrank 命令用于移除有序集中,指定排名(rank)区间内的所有成员。

语法

redis Zremrangebyrank 命令基本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYRANK key start stop

可用版本
>= 2.0.0

返回值

被移除成员的数量

实例

redis 127.0.0.1:6379> ZADD salary 2000 jack
(integer) 1
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
redis 127.0.0.1:6379> ZADD salary 3500 peter
(integer) 1

redis 127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1       # 移除下标 0 至 1 区间内的成员
(integer) 2

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES    # 有序集只剩下一个成员
1) "tom"
2) "5000"

Redis Zremrangebyscore 命令

Redis Zremrangebyscore 命令用于移除有序集中,指定分数(score)区间内的所有成员。

语法

redis Zremrangebyscore 命令基本语法如下:

redis 127.0.0.1:6379> ZREMRANGEBYSCORE key min max

可用版本
>= 1.2.0

返回值

被移除成员的数量

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES          # 显示有序集内所有成员及其 score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"

redis 127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500      # 移除所有薪水在 1500 到 3500 内的员工
(integer) 2

redis> ZRANGE salary 0 -1 WITHSCORES          # 剩下的有序集成员
1) "jack"
2) "5000"

Redis Zrevrange 命令

Redis Zrevrange 命令返回有序集中,指定区间内的成员。

其中成员的位置按分数值递减(从大到小)来排序。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

除了成员按分数值递减的次序排列这一点外,Zrevrange 命令的其他方面和 Zrange 命令一样

语法

redis Zrevrange 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANGE key start stop [WITHSCORES]

可用版本
>= 1.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES        # 递增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"

redis 127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES     # 递减排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"

Redis Zrevrangebyscore 命令

Redis Zrevrangscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列

除了成员按分数值递减的次序排列这一点外,Zrevrangebyscore 命令的其他方面和 Zrangebyscore 命令一样。

语法

redis Zrevrangebyscore 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

可用版本
>= 2.2.0

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

实例

redis 127.0.0.1:6379> ZADD salary 10086 jack
(integer) 1
redis > ZADD salary 5000 tom
(integer) 1
redis 127.0.0.1:6379> ZADD salary 7500 peter
(integer) 1
redis 127.0.0.1:6379> ZADD salary 3500 joe
(integer) 1

redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf   # 逆序排列所有成员
1) "jack"
2) "peter"
3) "tom"
4) "joe"

redis 127.0.0.1:6379> ZREVRANGEBYSCORE salary 10000 2000  # 逆序排列薪水介于 10000 和 2000 之间的成员
1) "peter"
2) "tom"
3) "joe"

Redis Zrevrank 命令

Redis Zrevrank 命令返回所有有序集中的排名。其中有序成员按分数值递减(从大到小)排序

排名以 0 为底,也就是说,分数值最大的成员排名为 0 。

使用 Zrank 命令够可以获得成员按分数值递增(从小到大)排列的排名。

语法

redis Zrevrank 命令基本语法如下:

redis 127.0.0.1:6379> ZREVRANK key member

可用版本
>= 2.2.0

返回值

如果成员是有序集 key 的成员,返回成员的排名。如果成员不是有序集 key 的成员,返回 nil 。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES     # 测试数据
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"

redis 127.0.0.1:6379> ZREVRANK salary peter     # peter 的工资排第二
(integer) 1

redis 127.0.0.1:6379> ZREVRANK salary tom       # tom 的工资最高
(integer) 0

Redis Zscore 命令

Redis Zscore 命令返回有序集中,成员的分数值。如果成员元素不是有序集 key 的成员,或key 不存在,返回 nil 。

语法

redis Zscore 命令基本语法如下:

ZSCORE key member

可用版本
>= 1.2.0

返回值

成员的分数值,以字符串形式表示。

实例

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"

redis 127.0.0.1:6379> ZSCORE salary peter              # 注意返回值是字符串
"3500"

Redis Zunionstore 命令

Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)存储到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员的分数值之和

语法

redis Zunionstore 命令基本语法如下:

redis 127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

可用版本
>= 2.0.0

返回值

保存到 destination 的结果集的成员数量。

实例

redis 127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"

redis 127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"

redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   # 公司决定加薪。。。除了程序员。。。
(integer) 6

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"

Redis Zscan 命令

Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值 )

语法

redis Zscan 命令基本语法如下:

redis 127.0.0.1:6379> redis 127.0.0.1:6379> ZSCAN key cursor [MATCH pattern] [COUNT count]

可用版本
>= 2.8.0

返回值

返回的每个元素都是一个有序集合元素,一个有序集合元素有一个成员(member)和一个分值(score)组成。

你可能感兴趣的:(NoSQL)