TairZset (exZset) は、最大 256 ディメンションの double 型のスコアで項目をソートできます。この機能は、ゲーム、ライブストリーミング、音楽、e コマースなどの業界のリーダーボードに役立ちます。エンコーディングやデコーディングが不要なため、データ処理効率が大幅に向上し、クライアント側の実装が簡素化されます。
TairZset の概要
ネイティブの Redis Sorted Set (Zset とも呼ばれます) は、単一の倍精度スコアによるソートのみをサポートします。これにより、多次元ソートの実装が困難になります。たとえば、IEEE 754 ビットレベルの連結などのメソッドを使用すると、複雑になり、精度が低下し、EXZINCRBY コマンドを使用できなくなります。
Alibaba Cloud が開発した TairZset データ構造は、多次元ソートの実装を簡素化します。従来の方法に比べて、次のような利点があります。
最大 256 ディメンションの double 型のスコアによるソートをサポートします。ソートの優先順位は左から右です。
多次元スコアの場合、左端のスコアが最も高い優先度を持ちます。たとえば、score1#score2#score3 のような 3 次元のスコアの場合、TairZset はまず score1 を比較します。score1 の値が等しい場合、TairZset は次に score2 を比較します。score2 の値も等しい場合、TairZset は score3 を比較します。すべてのスコアディメンションが同一の場合、要素は辞書式順序 (ASCII 順) でソートされます。
これを理解しやすくするために、ハッシュ記号 (#) を小数点 (.) と考えることができます。たとえば、0#99、99#90、99#99 の関係は、0.99 < 99.90 < 99.99 と理解できます。したがって、0#99 < 99#90 < 99#99 となります。
EXZINCRBY コマンドをサポートします。現在のデータを取得し、ローカルで値をインクリメントしてから Tair に書き戻す必要はもうありません。
ネイティブの Zset API に似た API を提供します。
標準リーダーボード と 分散アーキテクチャリーダーボード の両方の機能を提供します。
オープンソースの TairJedis クライアントを提供します。エンコーディングやデコーディングを行う必要はありません。また、オープンソースの実装をリファレンスとして使用して、他の言語でクライアントを開発することもできます。
典型的なシナリオ
TairZset は、ゲーム、ライブストリーミング、音楽、e コマースなどの業界のリーダーボードシナリオに適しています。例として、以下が挙げられます。
ライブストリーミングのリーダーボード: ストリーマーのコンテストでは、ストリーマーはまず現在の人気スコアでランク付けされます。人気スコアが同じ場合は、「いいね!」の数でランク付けされます。「いいね!」の数も同じ場合は、受け取ったギフトの合計金額でランク付けされます。
メダルテーブル: 参加者は金、銀、銅メダルの数に基づいてランク付けされます。まず金メダルの数でソートされます。金メダルの数が同じ場合は、銀メダルの数でソートされます。銀メダルの数も同じ場合は、銅メダルの数でソートされます。
ゲームのリーダーボード: プレイヤーは、スコア、タスク完了時間、ランクレベルなどの複数のディメンションに基づいてランク付けされます。
このモジュールはオープンソースです。詳細については、「TairZset」をご参照ください。
ベストプラクティス
前提条件
インスタンスは Tair メモリ最適化インスタンスである必要があります。インスタンスが Redis 5.0 と互換性のあるメモリ最適化インスタンスである場合、そのマイナーバージョンは 1.7.1 以降である必要があります。
最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することをお勧めします。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。インスタンスがクラスターインスタンスまたは読み書き分離インスタンスである場合は、すべてのコマンドが期待どおりに実行されるように、インスタンス内のプロキシノードを最新のマイナーバージョンに更新することをお勧めします。
注意
このトピックのコマンドは、Tair インスタンスの TairZset データに適用されます。
コマンド
コマンド | 構文 | 説明 |
| 指定されたキーの TairZset に、1 つ以上のメンバーとそのスコアを格納します。 説明 多次元ソートを実装するには、ハッシュ記号 (#) を使用して各ディメンションのスコアを区切ります (例: | |
| 指定されたキーの TairZset 内のメンバーのスコアを、increment の値だけインクリメントします。 | |
| 指定されたキーの TairZset 内のメンバーのスコアを返します。キーまたはメンバーが存在しない場合は、nil を返します。 | |
| 指定されたキーの TairZset から、指定された範囲の要素を返します。 | |
| 指定されたキーの TairZset から、指定された範囲の要素を返します。要素はスコアの高いものから低いものへと順に並べられます。同じスコアを持つ要素は、逆辞書式順序で並べられます。 説明 逆のソート順序を除き、このコマンドは EXZRANGE に似ています。 | |
| 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を返します。要素はスコアの低いものから高いものへと順に並べられます。同じスコアを持つ要素は、辞書式順序で並べられます。 | |
| 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を返します。デフォルトのソート順とは異なり、このコマンドはスコアの高いものから低いものへと順に並べられた要素を返します。同じスコアを持つ要素は、逆辞書式順序で並べられます。 説明 逆のソート順序を除き、このコマンドは EXZRANGEBYSCORE に似ています。このコマンドでは max が min の前に来ることに注意してください。 | |
| TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、指定されたキーで min と max の辞書式順序の範囲内にあるすべての要素を返します。 | |
| TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、指定されたキーで max と min の辞書式順序の範囲内にあるすべての要素を返します。 説明 逆のソート順序を除き、このコマンドは EXZRANGEBYLEX に似ています。このコマンドでは max が min の前に来ることに注意してください。 | |
| 指定されたキーの TairZset から指定されたメンバーを削除します。存在しないメンバーは無視されます。 | |
| 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を削除します。 | |
| 指定されたキーの TairZset 内で、ランクが start と stop の間にあるすべての要素を削除します。 | |
| TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、指定されたキーで max と min の辞書式順序の範囲内にあるすべての要素を削除します。 説明 このコマンドと EXZRANGEBYLEX コマンドを同じ min と max のパラメーター値で実行すると、このコマンドは EXZRANGEBYLEX コマンドが返すのと同じ要素を削除します。 | |
| 指定されたキーの TairZset のカーディナリティ (要素数) を返します。 | |
| 指定されたキーの TairZset 内のメンバーのランクを、スコアの低いものから高いものへと順に並べて返します。ランク (またはインデックス) は 0 から始まるため、スコアが最も低いメンバーのランクは 0 です。 | |
| 指定されたキーの TairZset 内のメンバーのランクを、スコアの高いものから低いものへと順に並べて返します。ランク (またはインデックス) は 0 から始まるため、スコアが最も高いメンバーのランクは 0 です。 説明 逆のソート順序を除き、このコマンドは EXZRANK に似ています。 | |
| 指定されたキーの TairZset 内で、スコアが min と max の間にある要素の数を返します。 | |
| TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、指定されたキーで min と max の辞書式順序の範囲内にある要素の数を返します。 | |
| 指定されたキーの TairZset 内で、指定されたスコアのランクを、スコアの低いものから高いものへと順に並べて計算します。ランク (またはインデックス) は 0 から始まるため、スコアが最も低いメンバーのランクは 0 です。 説明 指定されたスコアが存在しない場合、コマンドは TairZset 内のそのスコアの見込みランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで指定されたスコアを既存のスコアの前にランク付けします。 | |
| 指定されたキーの TairZset 内で、指定されたスコアのランクを、スコアの高いものから低いものへと順に並べて計算します。ランク (またはインデックス) は 0 から始まるため、スコアが最も高いメンバーのランクは 0 です。 説明 指定されたスコアが存在しない場合、コマンドは TairZset 内のそのスコアの見込みランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで指定されたスコアを既存のスコアの後にランク付けします。 | |
| ネイティブの Redis DEL コマンドを使用して、1 つ以上の TairZset キーを削除します。 |
次の一覧は、このトピックで使用されるコマンド構文の規則について説明しています。
Uppercase keyword: コマンドのキーワードを示します。Italic text: 変数を示します。[options]: 囲まれたパラメーターがオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。A|B: 縦棒 (|) で区切られたパラメーターが相互に排他的であることを示します。パラメーターの 1 つだけを指定できます。...: この記号の前のパラメーターを繰り返し指定できることを示します。
EXZADD
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N) |
コマンドの説明 | 指定されたキーの TairZset に、1 つ以上のメンバーとそのスコアを格納します。キーとメンバーが存在するかどうかに基づいて、システムは異なるアクションを実行します。
説明 多次元ソートを実装するには、ハッシュ記号 (#) を使用して各ディメンションのスコアを区切ります (例: |
オプション |
|
戻り値 | 以下を示す整数:
|
例 | コマンド例: 戻り値の例: |
EXZINCRBY
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | 指定されたキーの TairZset 内のメンバーのスコアを、increment の値だけインクリメントします。キーとメンバーが存在するかどうかに基づいて、システムは異なるアクションを実行します。
説明
|
オプション | なし |
戻り値 | メンバーの新しいスコアを文字列として返します。多次元スコアを使用する場合、フォーマットは |
例 | コマンド例: 戻り値の例: |
EXZSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたキーの TairZset 内のメンバーのスコアを返します。キーまたはメンバーが存在しない場合は、nil を返します。 |
オプション | なし |
戻り値 | メンバーのスコアを文字列として返します。多次元スコアを使用する場合、フォーマットは |
例 | コマンド例: 戻り値の例: |
EXZRANGE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 |
コマンドの説明 | 指定されたキーの TairZset から、指定された範囲の要素を返します。 |
オプション |
|
戻り値 | 指定された範囲の要素のリストを返します。WITHSCORES オプションを使用する場合、戻り値には要素のスコアが含まれます。 |
例 | コマンド例: 応答の例: |
EXZREVRANGE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 |
コマンドの説明 | 指定されたキーの TairZset から、指定された範囲の要素を返します。要素はスコアの高いものから低いものへと順に並べられます。同じスコアを持つ要素は、逆辞書式順序で並べられます。 説明 逆のソート順序を除き、このコマンドは EXZRANGE に似ています。 |
オプション |
|
戻り値 | 指定された範囲の要素のリストを返します。WITHSCORES オプションを使用する場合、戻り値には要素のスコアが含まれます。 |
例 | コマンド例: 戻り値の例: |
EXZRANGEBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して常に上位 10 個の要素を返す場合)、計算量は O(log(N)) と見なすことができます。 |
コマンドの説明 | 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を返します。要素はスコアの低いものから高いものへと順に並べられます。同じスコアを持つ要素は、辞書式順序で並べられます。 |
オプション |
|
戻り値 | 指定されたスコア範囲内の要素のリストを返します。WITHSCORES オプションを使用する場合、戻り値には要素のスコアが含まれます。 |
例 | コマンド例: 戻り値の例: |
EXZREVRANGEBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して常に上位 10 個の要素を返す場合)、計算量は O(log(N)) と見なすことができます。 |
コマンドの説明 | 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を返します。TairZset のデフォルトのソート順とは異なり、このコマンドはスコアの高いものから低いものへと順に並べられた要素を返します。同じスコアを持つ要素は、逆辞書式順序で並べられます。 説明 逆のソート順序を除き、このコマンドは EXZRANGEBYSCORE に似ています。このコマンドでは max が min の前に来ることに注意してください。 |
オプション |
|
戻り値 | 指定されたスコア範囲内の要素のリストを返します。WITHSCORES オプションを使用する場合、戻り値には要素のスコアが含まれます。 |
例 | コマンド例: 戻り値の例: |
EXZRANGEBYLEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して上位 10 個の要素を返す場合)、計算量は O(log(N)) と見なすことができます。 |
コマンドの説明 | TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、キーから min と max の辞書式順序の範囲内にある要素を返します。これにより、要素が辞書式順序でソートされることが保証されます。 説明
|
オプション |
|
戻り値 | 名前が指定された範囲内にある要素のリストを返します。 |
例 | コマンド例: 戻り値の例: |
EXZREVRANGEBYLEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は返される要素の数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して常に上位 10 個の要素を返す場合)、計算量は O(log(N)) と見なすことができます。 |
コマンドの説明 | TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、キーから max と min の辞書式順序の範囲内にある要素を返します。 説明 逆のソート順序を除き、このコマンドは EXZRANGEBYLEX に似ています。このコマンドでは max が min の前に来ることに注意してください。 |
オプション |
|
戻り値 | 名前が指定された範囲内にある要素のリストを返します。 |
例 | コマンド例: 戻り値の例: |
EXZREM
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M*log(N))。ここで、N は TairZset 内の要素の数、M は削除される要素の数です。 |
コマンドの説明 | 指定されたキーの TairZset から指定されたメンバーを削除します。存在しないメンバーは無視されます。 説明 指定されたキーは存在するが、そのデータ構造が TairZset でない場合、エラーが返されます。 |
オプション | なし |
戻り値 | キーから削除されたメンバーの数を返します。存在しないメンバーは含まれません。 |
例 | コマンド例: 戻り値の例: |
EXZREMRANGEBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は削除される要素の数です。 |
コマンドの説明 | 指定されたキーの TairZset 内で、スコアが min と max の間 (両端を含む) にあるすべての要素を削除します。 |
オプション | min と max は、最小スコアと最大スコアを表します。キー内の要素が多次元スコアを使用する場合、ハッシュ記号 (#) を使用して各ディメンションのスコアを区切ります。 説明
|
戻り値 | 削除された要素の数を返します。 |
例 | コマンド例: 戻り値の例: |
EXZREMRANGEBYRANK
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は操作によって削除された要素の数です。 |
コマンドの説明 | 指定されたキーの TairZset 内で、ランクが start と stop の間にあるすべての要素を削除します。 |
オプション | start と stop は 0 から始まるインデックスで、0 はスコアが最も低い要素を表します。インデックスが負の場合、スコアが最も高い要素からのオフセットを表します。たとえば、-1 はスコアが最も高い要素、-2 はスコアが 2 番目に高い要素です。 |
戻り値 | 削除された要素の数。 |
例 | コマンド例: 戻り値の例: |
EXZREMRANGEBYLEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素の数、M は操作によって削除された要素の数です。 |
コマンドの説明 | TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、キーから max と min の辞書式順序の範囲内にある要素を削除します。これにより、要素が辞書式順序でソートされることが保証されます。 説明 このコマンドと EXZRANGEBYLEX コマンドを同じ min と max のパラメーター値で実行すると、このコマンドは EXZRANGEBYLEX コマンドが返すのと同じ要素を削除します。 |
オプション | min と max は、最小および最大のメンバー名を文字列として表します。文字範囲を指定する必要があります。例:
|
戻り値 | 削除された要素の数。 |
例 | コマンド例: 戻り値の例: |
EXZCARD
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたキーの TairZset のカーディナリティ (要素数) を返します。 |
オプション | なし |
戻り値 | キー内の要素の数を返します。キーが存在しない場合は 0 を返します。 |
例 | コマンド例: 戻り値の例: |
EXZRANK
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | 指定されたキーの TairZset 内のメンバーのランクを、スコアの低いものから高いものへと順に並べて返します。ランク (またはインデックス) は 0 から始まるため、スコアが最も低いメンバーのランクは 0 です。 |
オプション | なし |
戻り値 |
|
例 | コマンド例: 戻り値の例: |
EXZREVRANK
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | 指定されたキーの TairZset 内のメンバーのランクを返します。結果はスコアの高いものから低いものへと順に並べられます。ランク (またはインデックス) は 0 から始まるため、スコアが最も高いメンバーのランクは 0 です。 説明 逆のソート順序を除き、このコマンドは EXZRANK に似ています。 |
オプション | なし |
戻り値 |
|
例 | コマンド例: 戻り値の例:(integer) 1 |
EXZCOUNT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N))。ここで、N は TairZset 内の要素の数です。 説明 クエリ範囲は要素のランクに基づいて取得されるため、この操作に関わる作業量はクエリ範囲のサイズに比例しません。 |
コマンドの説明 | 指定されたキーの TairZset 内で、スコアが min と max の間にある要素の数を返します。 |
オプション | min と max は、最小スコアと最大スコアを表します。キー内の要素が多次元スコアを使用する場合、ハッシュ記号 (#) を使用して各ディメンションのスコアを区切ります。 説明
|
戻り値 | 指定されたスコア範囲内の要素の数 (整数) を返します。 |
例 | コマンド例: 戻り値の例: |
EXZLEXCOUNT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N))。ここで、N は TairZset 内の要素の数です。 説明 クエリ範囲は要素のランクに基づいて取得されるため、この操作に関わる作業量はクエリ範囲のサイズに比例しません。 |
コマンドの説明 | TairZset 内のすべての要素が同じスコアを持つ場合、このコマンドは、指定されたキーで min と max の辞書式順序の範囲内にある要素の数を返します。これにより、要素が辞書式順序でソートされることが保証されます。 説明
|
オプション | min と max は、最小および最大のメンバー名を文字列として表します。文字範囲を指定する必要があります。例:
|
戻り値 | 指定されたスコア範囲内の要素の数 (整数) を返します。 |
例 | コマンド例: 戻り値の例: |
EXZRANKBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | 指定されたキーの TairZset 内で、指定されたスコアのランクを、スコアの低いものから高いものへと順に並べて計算します。ランク (またはインデックス) は 0 から始まるため、スコアが最も低いメンバーのランクは 0 です。 説明 指定されたスコアが存在しない場合、コマンドは TairZset 内のそのスコアの見込みランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで指定されたスコアを既存のスコアの前にランク付けします。 |
オプション | なし |
戻り値 | キー内の指定されたスコアのランクを返します。 |
例 | コマンド例: 戻り値の例: |
EXZREVRANKBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | 指定されたキーの TairZset 内で、指定されたスコアのランクを、スコアの高いものから低いものへと順に並べて計算します。ランク (またはインデックス) は 0 から始まるため、スコアが最も高いメンバーのランクは 0 です。 説明 指定されたスコアが存在しない場合、コマンドは TairZset 内のそのスコアの見込みランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで指定されたスコアを既存のスコアの後にランク付けします。 |
オプション | なし |
戻り値 | キー内の指定されたスコアのランクを返します。 |
例 | コマンド例: 戻り値の例: |