TairZset (exZset) は、256 個の double 型スコアによるソートをサポートします。ゲーム、ライブストリーミング、音楽、E コマースなどの業界におけるランキングシナリオに適しています。データ処理効率を大幅に向上させ、クライアントの適応も簡単で、エンコーディングやデコーディングのカプセル化は不要です。
TairZset の概要
ネイティブの Redis ソート済みセット (Zset とも呼ばれる) は、1 つの double 型スコアによるソートしかサポートしていないため、多次元ソートが困難です。たとえば、IEEE 754 と文字列連結を組み合わせて多次元ソートを実装するには、実装が複雑で、精度が低下し、EXZINCRBY コマンドが使用できないなどの制限があります。
Alibaba Cloud が独自に開発した TairZset データ構造は、多次元ソートを提供します。従来のソリューションに比べて、以下の利点があります。
最大 256 個の double 型スコアによるソートをサポートし、ソートの優先順位は左から右です。
多次元スコアの場合、最も左のスコアが最も高い優先順位を持ちます。たとえば、score1#score2#score3 のような 3 次元のスコアを考えます。TairZset がスコアを比較する際、まず score1 を比較します。score1 の値が等しい場合は、次に score2 を比較します。そうでない場合、score1 の比較結果が全体のスコアを決定します。同様に、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 クライアントを提供します。このクライアントは、エンコーディングやデコーディングのカプセル化を必要としません。また、オープンソースのコードを参照して、他の言語用のカプセル化を実装することもできます。
典型的なシナリオ
ゲーム、ライブストリーミング、音楽、E コマースなどの業界におけるランキングシナリオに適しています。例は次のとおりです。
ライブストリーミングのランキングリスト:ライブストリーミングの PK では、ストリーマーはまず現在の人気度でランク付けされます。人気度が同じ場合は、「いいね!」の数でランク付けされます。「いいね!」の数も同じ場合は、ギフト額などでランク付けされます。
メダルランキングリスト:参加者は金、銀、銅メダルでランク付けされます。まず、金メダルの数でソートされます。金メダルの数が同じ場合は、銀メダルの数でソートされます。銀メダルの数も同じ場合は、銅メダルの数でソートされます。
ゲームランキングリスト:プレイヤーはスコア、タスク完了時間、ランクなど、複数の次元でランク付けされます。
このモジュールはオープンソースです。詳細については、「TairZset」をご参照ください。
ベストプラクティス
前提条件
インスタンスは Tair のメモリ最適化インスタンスである必要があります。インスタンスがメモリ最適化 (Redis 5.0 互換) の場合、そのマイナーバージョンは 1.7.1 以降である必要があります。
最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することを推奨します。詳細については、「インスタンスのマイナーバージョンを更新」をご参照ください。ご利用のインスタンスがクラスターインスタンスまたは読み書き分離インスタンスの場合、すべてのコマンドが期待どおりに実行されるように、インスタンス内のプロキシノードを最新のマイナーバージョンに更新することを推奨します。
注意事項
操作は Tair インスタンス内の TairZset データに適用されます。
コマンド
コマンド | 構文 | 説明 |
| 指定されたスコアとメンバー情報を TairZset キーに格納します。複数のスコアとメンバーをサポートします。 説明 多次元ソートを実装するには、各次元のスコアをハッシュ記号 (#) で区切ります (例: | |
| TairZset キー内のメンバーのスコアを増分させます。increment はスコアに加算する値です。 | |
| TairZset キー内のメンバーのスコアを返します。キーまたはメンバーが存在しない場合、システムは nil を返します。 | |
| TairZset キー内の指定された範囲の要素を返します。 | |
| TairZset キー内の指定された範囲の要素を返します。要素はスコアの高い順にソートされます。同じスコアの要素は、逆辞書式順序でソートされます。 説明 逆順ソートを除き、このコマンドは EXZRANGE と同様です。 | |
| TairZset キー内で、スコアが min 以上かつ max 以下のすべての要素を返します。要素はスコアの低い順にソートされます。同じスコアの要素は、辞書式順序でソートされます。 | |
| TairZset キー内で、スコアが min 以上かつ max 以下のすべての要素を返します。デフォルトの TairZset ソートとは異なり、このコマンドは要素をスコアの高い順にソートします。同じスコアの要素は、逆辞書式順序でソートされます。 説明 逆順ソートを除き、このコマンドは EXZRANGEBYSCORE と同様です。このコマンドでは、max が min の前に来ることに注意してください。 | |
| 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で min と max の間にある要素を返します。 | |
| 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で max と min の間にある要素を返します。 説明 逆順ソートを除き、このコマンドは EXZRANGEBYLEX と同様です。このコマンドでは、max が min の前に来ることに注意してください。 | |
| キーから指定されたメンバーを削除します。指定されたメンバーが存在しない場合は無視します。 | |
| TairZset キーから、スコアが min 以上かつ max 以下の要素を削除します。 | |
| TairZset キーから、ランクが start と stop の間にある要素を削除します。 | |
| 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で max と min の間にある要素を削除します。 説明 このコマンドと EXZRANGEBYLEX コマンドで同じ min と max のパラメーター値を使用した場合、このコマンドは EXZRANGEBYLEX が返すのと同じ要素を削除します。 | |
| TairZset キーのカーディナリティ (要素数) を返します。 | |
| TairZset キー内のメンバーのランクを、スコアの低い順にソートして返します。ランク (またはインデックス) は 0 から始まり、最もスコアの低いメンバーのランクが 0 になります。 | |
| TairZset キー内のメンバーのランクを返します。結果はスコアの高い順にソートされます。ランク (またはインデックス) は 0 から始まり、最もスコアの高いメンバーのランクが 0 になります。 説明 逆順ソートのルールを除き、このコマンドは EXZRANK と同様です。 | |
| TairZset キー内で、スコアが min と max の間にある要素の数を返します。 | |
| 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で値が 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 キーに格納します。複数のスコアとメンバーをサポートします。システムは、キーとメンバーが存在するかどうかに基づいて、異なる戦略を適用します。
説明 多次元ソートを実装するには、各次元のスコアをハッシュ記号 (#) で区切ります (例: |
オプション |
|
戻り値 | 整数を返します。
|
例 | コマンド例: 戻り値の例: |
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 が先に指定されます。 |
オプション |
|
戻り値 | 指定されたスコア範囲内の要素のリストを返します。WITHSCORES オプションが使用されている場合、戻り値には要素のスコアが含まれます。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZRANGEBYLEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素数、M は返される要素数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して最初の 10 要素を返す場合)、この数式は O(log(N)) と見なすことができます。 |
コマンドの説明 | 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で min と max の間にある要素を返します。 説明
|
オプション |
|
戻り値 | 名前が指定された範囲内にある要素のリストを返します。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZREVRANGEBYLEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)+M)。ここで、N は TairZset 内の要素数、M は返される要素数です。 説明 M が定数である場合 (たとえば、LIMIT オプションを使用して常に最初の 10 要素を返す場合)、この数式は O(log(N)) と見なすことができます。 |
コマンドの説明 | 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で max と min の間にある要素を返します。 説明 このコマンドは EXZRANGEBYLEX の逆です。このコマンドでは、max パラメーターが先に指定されることに注意してください。 |
オプション |
|
戻り値 | 名前が指定された範囲内にある要素のリストを返します。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZREM
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M*log(N))。ここで、N は TairZset 内の要素数、M は削除する要素数です。 |
コマンドの説明 | キーから指定されたメンバーを削除します。指定されたメンバーが存在しない場合は無視します。 説明 指定されたキーが存在するが、そのデータ構造が 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 はこの操作によって削除された要素数です。 |
コマンドの説明 | 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で 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 と同様です。 |
オプション | なし |
戻り値 |
|
コマンド例 | コマンド例: 戻り値の例: |
EXZCOUNT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N))。ここで、N は TairZset 内の要素数です。 説明 この操作は要素レベルでクエリ範囲を取得するため、関連する作業量はクエリ範囲のサイズに比例しません。 |
コマンドの説明 | TairZset キー内で、スコアが min と max の間にある要素の数を返します。 |
オプション | min、max:それぞれ最小スコアと最大スコアを表します。キー内の要素が多次元スコアを使用する場合、各次元のスコアをハッシュ記号 (#) で区切ります。 説明
|
戻り値 | 指定されたスコア範囲内の要素の数 (整数) を返します。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZLEXCOUNT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N))。ここで、N は TairZset 内の要素数です。 説明 この操作は要素レベルでクエリ範囲を取得するため、関連する作業量はクエリ範囲のサイズに比例しません。 |
コマンドの説明 | 辞書式順序を保証するため、キー内のすべての要素が同じスコアを持つ場合、このコマンドはキー内で値が min と max の間にある要素の数を返します。 説明
|
オプション | min、max:それぞれ最小メンバー名と最大メンバー名 (文字列として) を表します。文字範囲を指定します。例:
|
戻り値 | 指定されたスコア範囲内の要素の数 (整数) を返します。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZRANKBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | TairZset キー内の指定されたスコアのランクを、スコアの低い順にソートして計算します。ランク (またはインデックス) は 0 から始まり、最もスコアの低いメンバーのランクが 0 になります。 説明 指定されたスコアが存在しない場合、TairZset キー内での推定ランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで既存のスコアの前に配置します。 |
オプション | なし |
戻り値 | キー内の指定されたスコアのランクを返します。 |
コマンド例 | コマンド例: 戻り値の例: |
EXZREVRANKBYSCORE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(log(N)) |
コマンドの説明 | TairZset キー内の指定されたスコアのランクを、スコアの高い順にソートして計算します。ランク (またはインデックス) は 0 から始まり、最もスコアの高いメンバーのランクが 0 になります。 説明 指定されたスコアが存在しない場合、TairZset キー内での推定ランクを返します。指定されたスコアが既に存在する場合、Tair はデフォルトで既存のスコアの後に配置します。 |
オプション | なし |
戻り値 | キー内の指定されたスコアのランクを返します。 |
コマンド例 | コマンド例: 戻り値の例: |