Redis:有序集ZRANGE、ZREVRANGE、ZRANGEBYSCORE、ZREVRANGEBYSCORE、ZRANK合、ZREVRANK命令介绍

ZRANGE

ZRANGE key start stop [WITHSCORES]
可用版本: >= 1.2.0
时间复杂度: O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

返回有序集key中,在指定区间内的成员。其中成员的位置按score值从小到大来排序。具有相同score值的成员按字典序来排序。

下标0表示有序集第一个成员,和程序语言里面的数组类似,以-1表示最后一个成员, -2表示倒数第二个成员,以此类推。

演示

使用WITHSCORES选项,可以将成员和它的score值一并返回。

127.0.0.1:6379> zadd sorted_set 1 yuan 2 kaven 3 java 4 docker 5 redis 6 vue
(integer) 6
127.0.0.1:6379> zrange sorted_set 0 -1
1) "yuan"
2) "kaven"
3) "java"
4) "docker"
5) "redis"
6) "vue"
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "java"
 6) "3"
 7) "docker"
 8) "4"
 9) "redis"
10) "5"
11) "vue"
12) "6"

其中成员的位置按score值从小到大来排序。具有相同score值的成员按字典序来排列。

127.0.0.1:6379> zadd sorted_set 3 Jenkins
(integer) 1
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jenkins"
 6) "3"
 7) "java"
 8) "3"
 9) "docker"
10) "4"
11) "redis"
12) "5"
13) "vue"
14) "6"
127.0.0.1:6379> zadd sorted_set 3 Jaaa
(integer) 1
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "java"
10) "3"
11) "docker"
12) "4"
13) "redis"
14) "5"
15) "vue"
16) "6"
127.0.0.1:6379> zadd sorted_set 3 jaaa
(integer) 1
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "jaaa"
10) "3"
11) "java"
12) "3"
13) "docker"
14) "4"
15) "redis"
16) "5"
17) "vue"
18) "6"

超出范围的下标并不会引起错误。 当start参数的值比有序集的最大下标还要大(stop参数同理),或是start > stop时, ZRANGE命令只是简单地返回一个空列表。

127.0.0.1:6379> zrange sorted_set 30 40
(empty list or set)
127.0.0.1:6379> zrange sorted_set 6 2
(empty list or set)
127.0.0.1:6379> zrange sorted_set -100 -55
(empty list or set)

stop参数的值比有序集的最大下标还要大,那么Redis会将stop参数当作最大下标来处理,start参数同理。

127.0.0.1:6379> zrange sorted_set 0 100
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"
127.0.0.1:6379> zrange sorted_set -100 100
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"
127.0.0.1:6379> zrange sorted_set -100 -1
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"

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

ZREVRANGE

ZREVRANGE key start stop [WITHSCORES]
可用版本: >= 1.2.0
时间复杂度: O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

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

演示

因为ZREVRANGE命令和ZRANGE命令很类似,这里就只演示它们不同的地方。

127.0.0.1:6379> zrevrange sorted_set 0 -1
1) "vue"
2) "redis"
3) "docker"
4) "java"
5) "jaaa"
6) "Jenkins"
7) "Jaaa"
8) "kaven"
9) "yuan"
127.0.0.1:6379> zrevrange sorted_set 2 5 withscores
1) "docker"
2) "4"
3) "java"
4) "3"
5) "jaaa"
6) "3"
7) "Jenkins"
8) "3"

其实ZREVRANGE命令的效果和将有序集key翻转过来(即逆序集)再执行ZRANGE命令的效果是一样的。

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

ZRANGEBYSCORE

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
可用版本: >= 1.0.5
时间复杂度: O(log(N)+M), N 为有序集的基数, M 为结果集的基数。

返回有序集key中,所有score值介于minmax之间(包括等于minmax)的所有成员。有序集成员按score值从小到大排序。具有相同score值的成员按字典序来排序。

LIMIT选项用于指定返回结果的开始位置及数量。

演示

minmax可以是-inf+inf,这样在不知道有序集成员的score值范围的情况下,也可以很方便地使用ZRANGEBYSCORE命令。

127.0.0.1:6379> ZRANGEBYSCORE sorted_set -inf +inf
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"

默认使用闭区间,可以在参数前加 ( 符号来使用可选的开区间。

127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "jaaa"
10) "3"
11) "java"
12) "3"
13) "docker"
14) "4"
15) "redis"
16) "5"
17) "vue"
18) "6"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set (2 (5 withscores
 1) "Jaaa"
 2) "3"
 3) "Jenkins"
 4) "3"
 5) "jaaa"
 6) "3"
 7) "java"
 8) "3"
 9) "docker"
10) "4"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set (2 5 withscores
 1) "Jaaa"
 2) "3"
 3) "Jenkins"
 4) "3"
 5) "jaaa"
 6) "3"
 7) "java"
 8) "3"
 9) "docker"
10) "4"
11) "redis"
12) "5"

还可以混合使用。

127.0.0.1:6379> ZRANGEBYSCORE sorted_set -inf (4 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "jaaa"
10) "3"
11) "java"
12) "3"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set (2 inf withscores
 1) "Jaaa"
 2) "3"
 3) "Jenkins"
 4) "3"
 5) "jaaa"
 6) "3"
 7) "java"
 8) "3"
 9) "docker"
10) "4"
11) "redis"
12) "5"
13) "vue"
14) "6"

LIMIT选项用于指定返回结果的开始位置及数量。

127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "jaaa"
10) "3"
11) "java"
12) "3"
13) "docker"
14) "4"
15) "redis"
16) "5"
17) "vue"
18) "6"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set -inf inf withscores limit 0 1
1) "yuan"
2) "1"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set -inf inf withscores limit 1 1
1) "kaven"
2) "2"
127.0.0.1:6379> ZRANGEBYSCORE sorted_set -inf inf withscores limit 3 3
1) "Jenkins"
2) "3"
3) "jaaa"
4) "3"
5) "java"
6) "3"

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

ZREVRANGEBYSCORE

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
可用版本: >= 2.2.0
时间复杂度: O(log(N)+M), N 为有序集的基数, M 为结果集的基数。

返回有序集key的逆序集中, score值介于maxmin之间(默认包括等于maxmin)的所有成员。

演示

ZREVRANGEBYSCORE命令和ZRANGEBYSCORE命令很类似,这里就只演示它们的不同之处。

127.0.0.1:6379> zrange sorted_set 0 -1 withscores
 1) "yuan"
 2) "1"
 3) "kaven"
 4) "2"
 5) "Jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "jaaa"
10) "3"
11) "java"
12) "3"
13) "docker"
14) "4"
15) "redis"
16) "5"
17) "vue"
18) "6"
127.0.0.1:6379> ZREVRANGEBYSCORE sorted_set inf -inf withscores limit 2 5
 1) "docker"
 2) "4"
 3) "java"
 4) "3"
 5) "jaaa"
 6) "3"
 7) "Jenkins"
 8) "3"
 9) "Jaaa"
10) "3"
127.0.0.1:6379> ZREVRANGEBYSCORE sorted_set inf -inf withscores limit 3 5
 1) "java"
 2) "3"
 3) "jaaa"
 4) "3"
 5) "Jenkins"
 6) "3"
 7) "Jaaa"
 8) "3"
 9) "kaven"
10) "2"

其实ZREVRANGEBYSCORE命令的效果和将有序集key翻转过来(即逆序集)再执行ZRANGEBYSCORE命令的效果是一样的。

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

ZRANK

ZRANK key member
可用版本: >= 2.0.0
时间复杂度: O(log(N))

返回有序集key中成员member的排名。有序集成员按score值从小到大排序,score值相同的成员按字典序排序。排名从0开始。

演示

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

127.0.0.1:6379> zrange sorted_set 0 -1
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"
127.0.0.1:6379> zrank sorted_set java
(integer) 5
127.0.0.1:6379> zrank sorted_set yuan
(integer) 0
127.0.0.1:6379> zrank sorted_set nginx
(nil)

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

ZREVRANK

ZREVRANK key member
可用版本: >= 2.0.0
时间复杂度: O(log(N))

返回有序集key逆序集中成员member的排名。排名也是从0开始。

演示

返回有序集key的逆序集中成员member的排名。

127.0.0.1:6379> zrange sorted_set 0 -1
1) "yuan"
2) "kaven"
3) "Jaaa"
4) "Jenkins"
5) "jaaa"
6) "java"
7) "docker"
8) "redis"
9) "vue"
127.0.0.1:6379> zrevrank sorted_set nginx
(nil)
127.0.0.1:6379> zrevrank sorted_set java
(integer) 3
127.0.0.1:6379> zrevrank sorted_set yuan
(integer) 8

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

Redis中有序集的ZRANGE、ZREVRANGE、ZRANGEBYSCORE、ZREVRANGEBYSCORE、ZRANK合、ZREVRANK命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITKaven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值