ZRANK、ZREVRANK:获取成员在有序集合中的排名

通过 ZRANK 命令和 ZREVRANK 命令,用户可以取得给定成员在有序集合中的排名:

ZRANK sorted_set member
ZREVRANK sorted_set member

其中 ZRANK 命令返回的是成员的升序排列排名,即成员在按照分值从小到大进行排列时的排名,而 ZREVRANK 命令返回的则是成员的降序排列排名,即成员在按照分值从大到小进行排列时的排名。

举个例子,对于图 6-13 所示的有序集合来说,我们可以通过执行以下命令来获取成员 "peter" 和 "tom" 在有序集合中的升序排列排名:

redis> ZRANK salary "peter"
(integer) 0
redis> ZRANK salary "tom"
(integer) 3
image 2025 01 03 19 32 54 944
Figure 1. 图6-13 salary有序集合

而执行以下命令则可以获取他们在有序集合中的降序排列排名:

redis> ZREVRANK salary "peter"
(integer) 4
redis> ZREVRANK salary "tom"
(integer) 1

图6-14 展示了 salary 集合的各个成员在执行 ZRANK 命令和 ZREVRANK 命令时的结果。

image 2025 01 03 19 33 46 579
Figure 2. 图6-14 salary有序集合的各个成员以及它们在执行ZRANK命令和ZREVRANK命令时的结果

处理不存在的键或者不存在的成员

如果用户给定的有序集合并不存在,或者用户给定的成员并不存在于有序集合当中,那么 ZRANK 命令和 ZREVRANK 命令将返回一个空值。以下是两个 ZRANK 命令的例子:

redis> ZRANK salary "harry"
(nil)
redis> ZRANK not-exists-sorted-set not-exists-member
(nil)

其它信息

  • 复杂度:O(log(N)),其中 N 为有序集合包含的成员数量。

  • 版本要求:ZRANK 命令和 ZREVRANK 命令从 Redis 2.0.0 版本开始可用。