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
值介于min
和max
之间(包括等于min
或max
)的所有成员。有序集成员按score
值从小到大排序。具有相同score
值的成员按字典序来排序。
LIMIT选项用于指定返回结果的开始位置及数量。
演示
min
和max
可以是-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
值介于max
和min
之间(默认包括等于max
或min
)的所有成员。
演示
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命令就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!