全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):exZset

更新時間:Oct 25, 2024

通過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資料。

命令列表

命令

文法

說明

EXZADD

EXZADD key [NX|XX] [CH] [INCR] score member [score member ...]

將指定的分數與成員資訊儲存到TairZset結構的Key中,支援指定多個分數與成員。

說明

如需實現多維度排序,各維度分數之間使用井號(#)分隔,例如111#222#121,且要求該Key中所有成員的分數格式必須相同。

EXZINCRBY

EXZINCRBY key increment member

為Key(TairZset資料結構)中的成員增加分數,increment為要增加的分數值。

EXZSCORE

EXZSCORE key member

返回儲存在Key(TairZset資料結構)中成員的分數,如果Key或Key中的成員不存在,系統會返回nil。

EXZRANGE

EXZRANGE key min max [WITHSCORES]

返回儲存在Key(TairZset資料結構)中指定範圍的元素。

EXZREVRANGE

EXZREVRANGE key min max [WITHSCORES]

返回儲存在Key(TairZset資料結構)中指定範圍內的元素,元素按分值從高到低的順序排列,按字典序降序排列分數相同的元素。

說明

除排序方式相反外,本命令和EXZRANGE用法相似。

EXZRANGEBYSCORE

EXZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回儲存在Key(TairZset資料結構)中,分數大於等於min且小於等於max值的所有元素,返回元素按分數從低到高排列,分數相同的元素按照字典順序返回。

EXZREVRANGEBYSCORE

EXZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回儲存在Key(TairZset資料結構)中,分數大於等於min且小於等於max值的所有元素。和TairZset中元素預設排序相反,該命令返回元素按照分數從高到低排列,分數相同的元素按照逆字典序排列。

說明

除排序方式相反外,本命令和EXZRANGEBYSCORE用法相似,注意本命令中max在前。

EXZRANGEBYLEX

EXZRANGEBYLEX key min max [LIMIT offset count]

為確保元素按照字典序排列,當Key中所有元素分數相同時,則該命令返回儲存在Key中介於minmax值之間的元素。

EXZREVRANGEBYLEX

EXZREVRANGEBYLEX key max min [LIMIT offset count]

為確保元素按照字典序排列,當Key中所有元素分數相同時,則該命令返回儲存在Key中介於max和min之間的元素。

說明

除排序方式相反外,本命令和EXZRANGEBYLEX用法相同,注意本命令中max在前。

EXZREM

EXZREM key member [member ...]

移除儲存Key中的指定成員,如果指定成員不存在,則忽略。

EXZREMRANGEBYSCORE

EXZREMRANGEBYSCORE key min max

移除儲存在Key(TairZset資料結構)中,分數大於等於min且小於等於max值的元素。

EXZREMRANGEBYRANK

EXZREMRANGEBYRANK key start stop

移除儲存在Key(TairZset資料結構)中,層級介於startstop之間的元素。

EXZREMRANGEBYLEX

EXZREMRANGEBYLEX key min max

為確保元素按照字典序排列,當Key中所有元素分數相同時,則該命令移除儲存在Key中介於max和min之間的元素。

說明

若使用相同的minmax參數值執行該命令和EXZRANGEBYLEX命令,則該命令移除的元素與EXZRANGEBYLEX命令返回的元素相同。

EXZCARD

EXZCARD key

返回儲存在Key(TairZset資料結構)中的基數(即元素的個數)。

EXZRANK

EXZRANK key member

返回儲存在Key(TairZset資料結構)中的成員的層級,按照分數由低到高排列。 層級(或索引)從0開始計數,即分數最低的成員的層級為0。

EXZREVRANK

EXZREVRANK key member

返回儲存在Key(TairZset資料結構)中的成員的層級。返回結果按照分數從高到低排列。 層級(或索引)從0開始計數,即分數最高的成員的層級為0。

說明

除定序相反外,本命令和EXZRANK用法類似。

EXZCOUNT

EXZCOUNT key min max

返回儲存在Key(TairZset資料結構)中,分數介於minmax之間的元素的個數。

EXZLEXCOUNT

EXZLEXCOUNT key min max

為確保元素按照字典序排列,若Key中所有元素分數相同,則該命令返回儲存在Key,值介於min和max之間的元素的數量。

EXZRANKBYSCORE

EXZRANKBYSCORE key score

計算指定的分數在Key(TairZset資料結構)中按照分數從低到高排序的排名位置。層級(或索引)從0開始計數,即分數最低的成員的層級為0。

說明

若指定的分數不存在,則返回該分數在Key(TairZset資料結構)中的預計排名;若指定的分數已存在,Tair會預設將指定的分數排在已存在的分數之前。

EXZREVRANKBYSCORE

EXZREVRANKBYSCORE key score

計算指定的分數在Key(TairZset資料結構)中按照分數從高到低排序的排名位置。層級(或索引)從0開始計數,即分數最高的成員的層級為0。

說明

若指定的分數不存在,則返回該分數在Key(TairZset資料結構)中的預計排名;若指定的分數已存在,Tair會預設將指定的分數排在已存在的分數之後。

DEL

DEL 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