通过TairZset(exZset)可实现256维度的double类型的分值排序,适用于游戏、直播、音乐、电商等行业的排行榜场景,可极大提升数据处理效率,且客户端适配简易,无需任何编解码封装。

TairZset简介

原生Redis支持的排序结构Sorted Set(也称Zset)只支持1个double类型的分值排序,实现多维度排序时较为困难。例如通过IEEE 754结合拼接的方式实现多维度排序,此类方式存在实现复杂、精度下降、EXZINCRBY命令无法使用等局限性。

借助阿里云自研的TairZset数据结构,可帮助您轻松实现多维度排序能力,相较于传统方案具有如下优势:
  • 最大支持256维的double类型的分值排序(排序优先级为从左往右)。

    对于多维score而言,左边的score优先级大于右边的score,以一个三维score为例:score1#score2#score3,TairZset在比较时,会先比较score1,只有score1相等时才会比较score2,否则就以score1的比较结果作为整个score的比较结果。同样,只有当score2相等时才会比较score3。若所有维度分数都相同,则会按照元素顺序(ascii顺序)进行排序。

    为了方便理解,可以把#想象成小数点(.),例如0#99、99#90和99#99大小关系可以理解为0.99 < 99.90 < 99.99,即0#99 < 99#90 < 99#99。

  • 支持EXZINCRBY命令,不再需要取回当前数据,在本地增加值后再拼接写回Tair
  • 支持和原生Zset相似的API。
  • 提供 普通排行榜分布式架构排行榜 的能力。
  • 提供开源TairJedis客户端,无需任何编解码封装,您也可以参考开源自行实现封装其他语言版本。
典型场景
适用于游戏、直播、音乐、电商等行业的排行榜场景,例如:
  • 直播排行榜:直播PK中,主播之间先按照当前人气值排序;如果人气值相同,再按照点赞数排序;如果点赞数也相同,再按照礼物金额进行排序等。
  • 奖牌排行榜:从金、银、铜牌的维度对参赛方进行排名,先按照金牌数量排序;如果金牌数量一致,再以银牌数量排序;如果银牌数量也一致,再按照铜牌数量排序。
  • 游戏排行榜:玩家之间按照得分、任务完成时长、段位等多个维度进行排名。

该Module已开源,更多信息请参见TairZset

最佳实践

前提条件

实例为Tair内存型,且小版本为1.7.1及以上。
说明 最新小版本将提供更丰富的功能与稳定的服务,建议将实例的小版本升级到最新,具体操作请参见升级小版本。如果您的实例为集群架构读写分离架构,请将代理节点的小版本也升级到最新,否则可能出现命令无法识别的情况。

注意事项

操作对象为Tair实例中的TairZset数据。

命令列表

命令语法说明
EXZADDEXZADD key [NX|XX] [CH] [INCR] score member [score member ...]将指定的分数与成员信息存储到TairZset结构的Key中,支持指定多个分数与成员。
说明 如需实现多维度的排序,各维度的分数之间使用井号(#)分隔,例如111#222#121,且要求该Key中所有成员的分数格式必须相同。
EXZINCRBYEXZINCRBY key increment member为Key(TairZset数据结构)中的成员增加分数,increment为要增加的分数值。
EXZSCOREEXZSCORE key member返回存储在Key(TairZset数据结构)中成员的分数,如果Key或Key中的成员不存在,系统会返回nil。
EXZRANGEEXZRANGE key min max [WITHSCORES]返回存储在Key(TairZset数据结构)中指定范围的元素。
EXZREVRANGEEXZREVRANGE key min max [WITHSCORES]返回存储在Key(TairZset数据结构)中指定范围内的元素,元素按分值从高到低的顺序排列,按字典序降序排列分数相同的元素。
说明 除排序方式相反外,本命令和EXZRANGE用法相似。
EXZRANGEBYSCOREEXZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]返回存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的所有元素,返回元素按分数从低到高排列,分数相同的元素按照字典顺序返回。
EXZREVRANGEBYSCOREEXZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]返回存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的所有元素。和TairZset中元素默认排序相反,该命令返回元素按照分数从高到低排列,分数相同的元素按照逆字典序排列。
说明 除排序方式相反外,本命令和EXZRANGEBYSCORE用法相似,注意本命令中max在前。
EXZRANGEBYLEXEXZRANGEBYLEX key min max [LIMIT offset count]为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令返回存储在Key中介于minmax值之间的元素。
EXZREVRANGEBYLEXEXZREVRANGEBYLEX key max min [LIMIT offset count]为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令返回存储在Key中介于max和min之间的元素。
说明 除排序方式相反外,本命令和EXZRANGEBYLEX用法相同,注意本命令中max在前。
EXZREMEXZREM key member [member ...]移除存储Key中的指定成员,如果指定成员不存在,则忽略。
EXZREMRANGEBYSCOREEXZREMRANGEBYSCORE key min max移除存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的元素。
EXZREMRANGEBYRANKEXZREMRANGEBYRANK key start stop移除存储在Key(TairZset数据结构)中,级别介于startstop之间的元素。
EXZREMRANGEBYLEXEXZREMRANGEBYLEX key min max为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令移除存储在Key中介于max和min之间的元素。
说明 若使用相同的minmax参数值执行该命令和EXZRANGEBYLEX命令,则该命令移除的元素与EXZRANGEBYLEX命令返回的元素相同。
EXZCARDEXZCARD key返回存储在Key(TairZset数据结构)中的基数(即元素的个数)。
EXZRANKEXZRANK key member 返回存储在Key(TairZset数据结构)中的成员的级别,按照分数由低到高排列。 级别(或索引)从0开始计数,即分数最低的成员的级别为0。
EXZREVRANKEXZREVRANK key member返回存储在Key(TairZset数据结构)中的成员的级别。返回结果按照分数从高到低排列。 级别(或索引)从0开始计数,即分数最高的成员的级别为0。
说明 除排序规则相反外,本命令和EXZRANK用法类似。
EXZCOUNTEXZCOUNT key min max返回存储在Key(TairZset数据结构)中,分数介于minmax之间的元素的个数。
EXZLEXCOUNTEXZLEXCOUNT key min max为确保元素按照字典序排列,若Key中所有元素分数相同,则该命令返回存储在Key,值介于min和max之间的元素的数量。
EXZRANKBYSCOREEXZRANKBYSCORE key score
计算指定的分数在Key(TairZset数据结构)中按照分数从低到高排序的排名位置。级别(或索引)从0开始计数,即分数最低的成员的级别为0。
说明 若指定的分数不存在,则返回该分数在Key(TairZset数据结构)中的预计排名;若指定的分数已存在,Tair会默认将指定的分数排在已存在的分数之前。
EXZREVRANKBYSCOREEXZREVRANKBYSCORE key score
计算指定的分数在Key(TairZset数据结构)中按照分数从高到低排序的排名位置。级别(或索引)从0开始计数,即分数最高的成员的级别为0。
说明 若指定的分数不存在,则返回该分数在Key(TairZset数据结构)中的预计排名;若指定的分数已存在,Tair会默认将指定的分数排在已存在的分数之后。
DELDEL key [key ...]使用原生Redis的DEL命令可以删除一条或多条TairZset数据。
说明 本文的命令语法定义如下:
  • 大写关键字:命令关键字。
  • 斜体:变量。
  • [options]:可选参数,不在括号中的参数为必选。
  • A|B:该组参数互斥,请进行二选一或多选一。
  • ...:前面的内容可重复。

EXZADD

类别说明
语法EXZADD key [NX|XX] [CH] [INCR] score member [score member ...]
时间复杂度 O(N)
命令描述将指定的分数与成员信息存储到TairZset结构的Key中,支持指定多个分数与成员,系统会根据Key和成员是否存在,执行不同的策略:
说明 如需实现多维度的排序,各维度的分数之间使用井号(#)分隔,例如111#222#121,且要求该Key中所有成员的分数格式必须相同。
  • 如果指定的Key存在,但其数据结构不是TairZset,系统将返回错误。
  • 如果指定的Key不存在,系统将创建一个TairZset结构的Key,然后将指定的成员添加至该Key中。
  • 如果指定的成员已经是TairZset的成员,则会更新该成员的分数,并将该成员重新插入到正确的位置,避免打乱排序。
  • 每个分数值使用双精度浮点数的字符串表示,+inf和-inf值都是有效值。
选项
  • NX:只添加新元素,不更新已经存在的元素。
  • XX:只更新已经存在的元素,不添加新的元素。
  • CH:一般情况下,本命令的返回值为添加的新元素数量,通过该参数可以将返回值改为发生变化的元素总数。
    说明 发生变化的元素包含新元素和分数有更新的已有元素。 因此,如果命令行中已存在的一个元素的分数没有发生变化,则该元素不算作发生变化的元素。
  • INCR:指定此选项时,EXZADD的行为与EXZINCRBY类似,即该模式下仅支持指定一对分数与元素。
返回值返回值为整数数字,具体为:
  • 未指定任何选项时,返回值为添加到Key中的元素数量(不包括仅更新分数的元素)。
  • 指定了CH选项时,返回值为发生变化的(新增或更新)元素数量。
  • 指定了INCR选项时,则返回值为成员的新分数(字符串形式)。如果使用了多维度分数,则该成员分数的格式为"分数1#分数2#分数3#...",例如2#0#6
    说明 如果停止该操作(命令中包含XX或NX选项),则返回nil。
示例
命令示例:
EXZADD testkey NX 1#0#3 a 1#0#2 b
返回示例:
(integer) 2

EXZINCRBY

类别说明
语法EXZINCRBY key increment member
时间复杂度O(log(N))
命令描述为Key(TairZset数据结构)中的成员增加分数,increment为要增加的分数值,系统会根据Key和成员是否存在,执行不同的策略:
  • 如果指定的Key存在,但其数据结构不是TairZset,系统将返回错误。
  • 如果指定的Key不存在,系统将创建一个TairZset结构的Key,然后将指定的成员作为该Key的唯一成员。
  • 如果指定的Key没有成员,系统将向其中添加一个分数为increment参数值的成员,即假设成员原分数为0.0分。
说明
  • 如需实现多维度的排序,各维度的分数之间使用井号(#)分隔,例如111#222#121,且要求该Key中所有成员的分数格式必须相同。
  • 分数值应为数字值的字符串形式,可以为双精度浮点数。 如果需要降低成员的分数,则指定一个负数。
选项
返回值返回成员的新分数(字符串形式),如果使用了多维度分数,则该成员分数的格式为"分数1#分数2#分数3#...",例如2#0#6
示例

命令示例:

EXZINCRBY testkey 2#2#1 a

返回示例:

"3#2#4"

EXZSCORE

类别说明
语法EXZSCORE key member
时间复杂度O(1)
命令描述返回存储在Key(TairZset数据结构)中成员的分数,如果Key或Key中的成员不存在,系统会返回nil。
选项
返回值返回成员的分数(字符串形式),如果使用了多维度分数,则该成员分数的格式为"分数1#分数2#分数3#...",例如2#0#6
示例

命令示例:

EXZSCORE testkey a

返回示例:

"3#2#4"

EXZRANGE

类别说明
语法EXZRANGE key min max [WITHSCORES]
时间复杂度O(log(N)+M),其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
命令描述返回存储在Key(TairZset数据结构)中指定范围的元素。
选项
  • minmax:代表基于0的索引值。其中,第一个元素的索引值为0,第二个元素的索引值为1,依此类推。 可使用这两个参数指定一个闭区间。
    说明
    • 如果索引值为负数,则表示返回的元素末尾往前偏移的量。比如,-1代表Key的最后一个元素,-2代表倒数第二个元素,依此类推。
    • 如需查询所有的元素信息,min取值为0,max取值为-1。
    • 如果min的值比Key中最后一个元素的索引值或max的值更大,则返回空列表。
  • WITHSCORES:返回值中包含元素的分数,即返回列表的数据格式为值1,分数1,...,值N,分数N,例如:
    1) "b"
    2) "1#0#2"
    3) "a"
    4) "3#2#4"
返回值返回指定范围内元素的列表,如果使用了WITHSCORES选项,则返回结果中包含元素的分数。
示例

命令示例:

EXZRANGE testkey 0 -1 WITHSCORES

返回示例:

1) "b"
2) "1#0#2"
3) "a"
4) "3#2#4"

EXZREVRANGE

类别说明
语法EXZREVRANGE key min max [WITHSCORES]
时间复杂度O(log(N)+M),其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
命令描述返回存储在Key(TairZset数据结构)中指定范围内的元素,元素按分值从高到低的顺序排列,按字典序降序排列分数相同的元素。
说明 除排序方式相反外,本命令和EXZRANGE用法相似。
选项
  • minmax:代表基于0的索引值。其中,第一个元素的索引值为0,第二个元素的索引值为1,依此类推。 可使用这两个参数指定一个闭区间。
    说明
    • 如果索引值为负数,则表示返回的元素末尾往前偏移的量。比如,-1代表Key的最后一个元素,-2代表倒数第二个元素,依此类推。
    • 如需查询所有的元素信息,min取值为0,max取值为-1。
    • 如果min的值比Key中最后一个元素的索引值或max的值更大,则返回空列表。
  • WITHSCORES:返回值中包含元素的分数,即返回列表的数据格式为值1,分数1,...,值N,分数N,例如:
    1) "b"
    2) "1#0#2"
    3) "a"
    4) "3#2#4"
返回值

返回指定范围内的元素列表,如果使用了WITHSCORES选项,则返回结果中包含元素的分数。

示例

命令示例:

EXZREVRANGE testkey 0 -1 WITHSCORES

返回示例:

1) "a"
2) "3#2#4"
3) "b"
4) "1#0#2"

EXZRANGEBYSCORE

类别说明
语法EXZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
时间复杂度O(log(N)+M),其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
说明 当M为常量时(例如使用LIMIT选项指定总是返回前10个元素时),可将该公式看作O(log(N))。
命令描述返回存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的所有元素,返回元素按分数从低到高排列,分数相同的元素按照字典顺序返回。
选项
  • minmax:分别表示最小分数和最大分数,如Key中的元素采用了多维度的分数,各维度的分数之间使用井号(#)分隔。
    说明
    • 在不确定Key中元素的最高分和最低分的情况下,如果想要查询Key中分数大于等于或小于等于某一特定值的元素,请将minmax分别设置为负无穷大(-inf)和正无穷大(+inf)。
    • 默认数据范围为闭区间,如需指定开区间,则在分数范围前添加半角圆括号,例如(1 5表示返回分数大于1且小于等于5的元素。
  • WITHSCORES:返回值中包含元素的分数。
  • LIMIT offset count:指定返回结果的数量及区间,如果count为负数,则返回从offset开始的所有元素。
    说明 如果offset较大,则需要遍历整个Key以定位到offset元素,然后才能返回元素,即会增加时间复杂度。
返回值

返回指定分数范围内的元素列表,如果使用了WITHSCORES选项,则返回结果中包含元素的分数。

命令示例

命令示例:

EXZRANGEBYSCORE testkey 0#0#0 6#6#6 WITHSCORES

返回示例:

1) "b"
2) "1#0#2"
3) "a"
4) "3#2#4"

EXZREVRANGEBYSCORE

类别说明
语法EXZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
时间复杂度O(log(N)+M) ,其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
说明 当M为常量时(比如使用LIMIT选项指定总是返回前10个元素时),可将该公式看作O(log(N))。
命令描述返回存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的所有元素。和TairZset中元素默认排序相反,该命令返回元素按照分数从高到低排列,分数相同的元素按照逆字典序排列。
说明 除排序方式相反以外,本命令和EXZRANGEBYSCORE用法相似,注意本命令中max在前。
选项
  • minmax:分别表示最小分数和最大分数,如Key中的元素采用了多维度的分数,各维度的分数之间使用井号(#)分隔。
    说明
    • 在不确定Key中元素的最高分和最低分的情况下,如果想要查询Key中分数大于等于或小于等于某一特定值的元素,请将minmax分别设置为负无穷大(-inf)和正无穷大(+inf)。
    • 默认数据范围为闭区间,如需指定开区间,则在分数范围前添加半角圆括号,例如(1 5表示返回分数大于1且小于等于5的元素。
  • WITHSCORES:返回值中包含元素的分数。
  • LIMIT offset count:指定返回结果的数量及区间,如果count为负数,则返回从offset开始的所有元素。
    说明 如果offset较大,则需要遍历整个Key以定位到offset元素,然后才能返回元素,即会增加时间复杂度。
返回值

返回指定分数范围内的元素列表,如果使用了WITHSCORES选项,则返回结果中包含元素的分数。

命令示例

命令示例:

EXZREVRANGEBYSCORE testkey 6#6#6 0#0#0 WITHSCORES

返回示例:

1) "a"
2) "3#2#4"
3) "b"
4) "1#0#2"

EXZRANGEBYLEX

类别说明
语法EXZRANGEBYLEX key min max [LIMIT offset count]
时间复杂度O(log(N)+M),其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
说明 当M为常量时(例如使用LIMIT选项指定返回前10个元素时),可将该公式看作O(log(N))。
命令描述为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令返回存储在Key中介于minmax值之间的元素。
说明
  • 如果Key中元素分数不同,则返回元素未知。
  • 采用memcmp() C函数逐个比对两个元素字符串中的字节。根据比对结果,由低到高排列元素。 若两个字符串包含相同的子字符串,那么字符串越长,其分值越高。
选项
  • minmax:分别表示成员名称的最小值和最大值(字符串形式),需指定字符的区间,例如
    • 开区间:在值的前面增加半角圆括号,例如(a
    • 闭区间:在值的前面增加方括号,例如[a
    说明 正负无穷大分别为+-
  • LIMIT offset count:指定返回结果的数量及区间,如果count为负数,则返回从offset开始的所有元素。
    说明 如果offset较大,则需要遍历整个Key以定位到offset元素,然后才能返回元素,即会增加时间复杂度。
返回值返回元素名称在指定范围内的元素列表。
命令示例

命令示例:

EXZRANGEBYLEX zzz [a [b

返回示例:

1) "aba"
2) "abc"

EXZREVRANGEBYLEX

类别说明
语法EXZREVRANGEBYLEX key max min [LIMIT offset count]
时间复杂度O(log(N)+M),其中,N表示TairZset中元素的数量,M表示返回的元素的数量。
说明 当M为常量时(例如使用LIMIT选项指定总是返回前10个元素时),可将该公式看作O(log(N))。
命令描述为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令返回存储在Key中介于max和min之间的元素。
说明 除排序方式相反外,本命令和EXZRANGEBYLEX用法相同,注意本命令中max在前。
选项
  • minmax:分别表示成员名称的最小值和最大值(字符串形式),需指定字符的区间,例如
    • 开区间:在值的前面增加半角圆括号,例如(a
    • 闭区间:在值的前面增加方括号,例如[a
    说明 正负无穷大分别为+-
  • LIMIT offset count:指定返回结果的数量及区间,如果count为负数,则返回从offset开始的所有元素。
    说明 如果offset较大,则需要遍历整个Key以定位到offset元素,然后才能返回元素,即会增加时间复杂度。
返回值返回元素名称在指定范围内的元素列表。
命令示例

命令示例:

EXZREVRANGEBYLEX zzz [b [a

返回示例:

1) "abc"
2) "aba"

EXZREM

类别说明
语法EXZREM key member [member ...]
时间复杂度O(M*log(N)),其中,N为TairZset中元素的数量,M为待移除的元素的数量。
命令描述移除存储Key中的指定成员,如果指定成员不存在,则忽略。
说明 如果指定的Key存在,但其数据结构不是TairZset,系统将返回错误。
选项
返回值返回Key中被移除的成员数量,不包含不存在的成员。
命令示例

命令示例:

EXZREM testkey a

返回示例:

(integer) 1

EXZREMRANGEBYSCORE

类别说明
语法EXZREMRANGEBYSCORE key min max
时间复杂度O(log(N)+M),其中,N为TairZset中元素的数量,M为待移除的元素的数量。
命令描述移除存储在Key(TairZset数据结构)中,分数大于等于min且小于等于max值的元素。
选项minmax分别表示最小分数和最大分数,如Key中的元素采用了多维度的分数,各维度的分数之间使用井号(#)分隔。
说明
  • 在不确定Key中元素的最高分和最低分的情况下,如果想要移除Key中分数大于等于或小于等于某一特定值的元素,请将minmax分别设置为负无穷大(-inf)和正无穷大(+inf)。
  • 默认数据范围为闭区间,如需指定开区间,则在分数范围前添加半角圆括号,例如EXZREMRANGEBYSCORE (1 5表示删除分数大于1且小于等于5的元素。
返回值返回被移除的元素的数量。
命令示例

命令示例:

EXZREMRANGEBYSCORE testkey 3#2#4 6#6#6

返回示例:

(integer) 1

EXZREMRANGEBYRANK

类别说明
语法EXZREMRANGEBYRANK key start stop
时间复杂度O(log(N)+M),其中,N为TairZset中元素的数量,M为该操作移除的元素的数量。
命令描述移除存储在Key(TairZset数据结构)中,级别介于startstop之间的元素。
选项startstop均为基于零的索引值,其中,0代表分数最低的元素。 当索引值为负数,代表从最高分数元素开始的偏移量,例如-1为分数最高的元素,-2为分数第二高的元素,依此类推。
返回值被移除的元素的数量。
命令示例

命令示例:

EXZREMRANGEBYRANK testkey 0 1EXZREVRANGEBYSCORE

返回示例:

(integer) 1

EXZREMRANGEBYLEX

类别说明
语法EXZREMRANGEBYLEX key min max
时间复杂度O(log(N)+M),其中,N为TairZset中元素的数量,M为该操作移除的元素的数量。
命令描述为确保元素按照字典序排列,当Key中所有元素分数相同时,则该命令移除存储在Key中介于max和min之间的元素。
说明 若使用相同的minmax参数值执行该命令和EXZRANGEBYLEX命令,则该命令移除的元素与EXZRANGEBYLEX命令返回的元素相同。
选项minmax:分别表示成员名称的最小值和最大值(字符串形式),需指定字符的区间,例如
  • 开区间:在值的前面增加半角圆括号,例如(a
  • 闭区间:在值的前面增加方括号,例如[a
返回值被移除的元素的数量。
命令示例

命令示例:

EXZREMRANGEBYLEX [a [b

返回示例:

(integer) 2

EXZCARD

类别说明
语法EXZCARD key
时间复杂度O(1)
命令描述返回存储在Key(TairZset数据结构)中的基数(即元素的个数)。
选项
返回值返回Key中的元素的数量,如果Key不存在,则返回0。
命令示例

命令示例:

EXZCARD testkey

返回示例:

(integer) 2

EXZRANK

类别说明
语法EXZRANK key member
时间复杂度O(log(N))
命令描述返回存储在Key(TairZset数据结构)中的成员的级别,按照分数由低到高排列。 级别(或索引)从0开始计数,即分数最低的成员的级别为0。
选项
返回值
  • 当Key中存在指定的成员,则返回成员的级别(整数)。
  • 当Key或Key中的成员不存在,则返回nil。
命令示例

命令示例:

EXZRANK testkey b

返回示例:

(integer) 0

EXZREVRANK

类别说明
语法EXZREVRANK key member
时间复杂度O(log(N))
命令描述返回存储在Key(TairZset数据结构)中的成员的级别。返回结果按照分数从高到低排列。 级别(或索引)从0开始计数,即分数最高的成员的级别为0。
说明 除排序规则相反外,本命令和EXZRANK用法类似。
选项
返回值
  • 当Key中存在指定的成员,则返回成员的级别(整数)。
  • 当Key或Key中的成员不存在,则返回nil。
命令示例

命令示例:

EXZREVRANK testkey b

返回示例:

(integer) 1

EXZCOUNT

类别说明
语法EXZCOUNT key min max
时间复杂度O(log(N)),其中,N为TairZset中元素的数量。
说明 由于采用了元素级别获取查询范围,该操作涉及的工作量和查询范围的大小即不成正比。
命令描述返回存储在Key(TairZset数据结构)中,分数介于minmax之间的元素的个数。
选项minmax:分别表示最小分数和最大分数,如Key中的元素采用了多维度的分数,各维度的分数之间使用井号(#)分隔。
说明
  • 在不确定Key中元素的最高分和最低分的情况下,如果想要查询Key中分数大于等于或小于等于某一特定值的元素,请将minmax分别设置为负无穷大和正无穷大。
  • 默认数据范围为闭区间,如需指定开区间,则在分数范围前添加半角圆括号,例如(1 5表示返回分数大于1且小于等于5的元素。
返回值返回分数在指定范围内的元素的数量(整数)。
命令示例

命令示例:

EXZCOUNT testkey (1#0#2 6#6#6

返回示例:

(integer) 1

EXZLEXCOUNT

类别说明
语法EXZLEXCOUNT key min max
时间复杂度O(log(N)),其中,N为TairZset中元素的数量。
说明 由于采用了元素级别获取查询范围,该操作涉及的工作量和查询范围的大小即不成正比。
命令描述为确保元素按照字典序排列,若Key中所有元素分数相同,则该命令返回存储在Key,值介于min和max之间的元素的数量。
说明
  • 如果Key中元素分数不同,则返回元素未知。
  • 采用memcmp() C函数逐个比对两个元素字符串中的字节。根据比对结果,由低到高排列元素。 若两个字符串包含相同的子字符串,那么字符串越长,其分值越高。
选项minmax:分别表示成员名称的最小值和最大值(字符串形式),需指定字符的区间,例如
  • 开区间:在值的前面增加半角圆括号,例如(a
  • 闭区间:在值的前面增加方括号,例如[a
返回值返回分数在指定范围内的元素的个数(整数)。
命令示例

命令示例:

EXZLEXCOUNT zzz [a [b

返回示例:

(integer) 2

EXZRANKBYSCORE

类别说明
语法EXZRANKBYSCORE key score
时间复杂度O(log(N))
命令描述
计算指定的分数在Key(TairZset数据结构)中按照分数从低到高排序的排名位置。级别(或索引)从0开始计数,即分数最低的成员的级别为0。
说明 若指定的分数不存在,则返回该分数在Key(TairZset数据结构)中的预计排名;若指定的分数已存在,Tair会默认将指定的分数排在已存在的分数之前。
选项
返回值返回指定分数在Key中的排名。
命令示例

命令示例:

EXZRANKBYSCORE testkey 2#0#2 

返回示例:

(integer) 1

EXZREVRANKBYSCORE

类别说明
语法EXZREVRANKBYSCORE key score
时间复杂度O(log(N))
命令描述
计算指定的分数在Key(TairZset数据结构)中按照分数从高到低排序的排名位置。级别(或索引)从0开始计数,即分数最高的成员的级别为0。
说明 若指定的分数不存在,则返回该分数在Key(TairZset数据结构)中的预计排名;若指定的分数已存在,Tair会默认将指定的分数排在已存在的分数之后。
选项
返回值返回指定分数在Key中的排名。
命令示例

命令示例:

EXZREVRANKBYSCORE testkey 2#0#2 

返回示例:

(integer) 1