Redis秩序集合コマンドZREVRANGEBYLEXの詳細と応用


Redis秩序集合コマンドZREVRANGEBYLEXの詳細と応用
1概要
ZREVRANGEBYLEXが指定したメンバー区間内のメンバーの順序を返すのは、ディクショナリの逆順序でソートされるスコアが同じでなければならないビジネスシーンがあり、1つの文字列配列を名前のディクショナリの順序で逆順序でソートする必要がある場合、RedisのSortSetというデータ構造を使用して処理できます.
2構文
2.1完全な例
ZREVRANGEBYLEX key max min [LIMIT offset count]

2.2説明
インストラクション
必要かどうか
説明
ZREVRANGEBYLEX
はい
インストラクション
key
はい
順序付きコレクションキー名
max
はい
ディクショナリ内のソート位置が大きいメンバーは、「先頭、または」(「先頭、使用可能」+)で置換する必要があります.
min
はい
ディクショナリ内のソート位置が小さいメンバーは、「[先頭、または](先頭、使用可能)-で置換する必要があります.
LIMIT
いいえ
結果がページングされているかどうかを返します.命令にLIMITが含まれている場合offset、countは入力する必要があります.
offset
いいえ
結果の開始位置を返します
count
いいえ
結果の数を返します
ヒント:
  • の点数は同じでなければなりません!秩序化されたセット内のメンバーのスコアが一致しない場合、返される結果は正しくありません.
  • メンバー文字列をバイナリ配列のバイト数として比較します.
  • のデフォルトは、ASCII文字セットの順序で並べ替えられます.メンバー文字列にutf-8のような文字セットの内容が含まれている場合は、戻り結果に影響しますので、使用しないことをお勧めします.
  • ソースコードにはC言語のmemcmp()関数が用いられ、文字の0番目から最後のビットまでソートされ、前の部分が同じであれば、長い文字列の短い文字列のソートが前になります.
  • デフォルトでは、「max」パラメータと「min」パラメータの前に「[」記号を先頭に付けなければなりません.「[」記号とメンバーの間にスペースはありません.メンバー結果セットに戻るには、パラメータ「max」および「min」
  • が含まれます.
  • 「max」および「min」パラメータの前に「(」記号を先頭として小さく、「(」記号とメンバーの間にスペースを空けることはできません.メンバー結果セットに「max」および「min」メンバーは含まれません.
  • は、スコアの最小値および最大値
  • を「-」および「+」で表すことができる.
  • 「max」と「min」は逆にできません.「max」を後ろに「min」を前にすると、
  • という結果になります.
  • ZREVRANGEBYLEX取得順序とは逆の命令はZREVRANGEBYLEXである.

  • 3戻り値
    メンバー範囲の要素リストを指定します.
    4例
    スコアが一致しないSortSetセットでZREVRANGEBYLEX命令を使用しないでください.取得された結果は正確ではありません.
    4.1すべての値の取得
    「-」と「+」を使用して、最小値と最大値を表すことができます.
    redis> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
    (integer) 12
    redis> ZREVRANGEBYLEX zset + -
     1) "z1"
     2) "z"
     3) "dobble"
     4) "dd"
     5) "d1"
     6) "d"
     7) "c"
     8) "b"
     9) "apple"
    10) "abc"
    11) "aa"
    12) "a"
    

    4.2ページングデータの取得
    redis> ZREVRANGEBYLEX zset + - LIMIT 0 3
    1) "z1"
    2) "z"
    3) "dobble"
    redis> ZREVRANGEBYLEX zset + - LIMIT 3 3
    1) "dd"
    2) "d1"
    3) "d"
    

    4.3メンバー間の要素の取得
    デフォルトでは、「max」パラメータと「min」パラメータの前に「[」記号を先頭に付ける必要があります.「[」記号とメンバーの間にスペースを置くことはできません.メンバー結果セットにパラメータ「min」と「max」が含まれていることを返します.
    redis> ZREVRANGEBYLEX zset [c [aa
    1) "c"
    2) "b"
    3) "apple"
    4) "abc"
    5) "aa"
    

    「min」と「max」は逆にできません.「min」を前に「max」を後ろに置くと、戻り結果が空になります.
    redis> ZREVRANGEBYLEX zset [aa [c
    (empty list or set)
    

    4.4「(」より小さい番号でメンバー間の要素を取得する
    「max」パラメータと「min」パラメータの前に「(」記号を先頭に小さく、「(」記号とメンバーの間にスペースを置くことはできません.メンバー結果セットに戻ると「max」および「min」メンバーは含まれません.
    redis> ZREVRANGEBYLEX zset (c (aa
    1) "b"
    2) "apple"
    3) "abc"
    

    4.5 ASCIIコードの影響
    メンバー文字列は、バイナリ配列のバイト数として比較されます.デフォルトでは、ASCII文字セットの順序で並べ替えられます.メンバー文字列にutf-8のような文字セットの内容が含まれている場合は、戻り結果に影響しますので、使用しないことをお勧めします.次の例では、大文字の後の順序に注意してください.
    redis> zadd zset 0 dB
    (integer) 1
    redis> ZREVRANGEBYLEX zset + -
     1) "z1"
     2) "z"
     3) "dobble"
     4) "dd"
     5) "dB"
     6) "d1"
     7) "d"
     8) "c"
     9) "b"
    10) "apple"
    11) "abc"
    12) "aa"
    13) "a"
    redis> ZREVRANGEBYLEX zset + - limit 0 3
    1) "z1"
    2) "z"
    3) "dobble"
    redis> ZREVRANGEBYLEX zset + - limit 3 3
    1) "dd"
    2) "dB"
    3) "d1"
    

    5シーンの使用例
    5.1電話番号の並べ替え
    電話番号をSortSetに保存し、必要に応じて番号セグメントを取得できます.
    redis> zadd phone 0 13100111100 0 13110114300 0 13132110901 
    (integer) 3
    redis> zadd phone 0 13200111100 0 13210414300 0 13252110901 
    (integer) 3
    redis> zadd phone 0 13300111100 0 13310414300 0 13352110901 
    (integer) 3
    

    大きいから小さいまですべての番号を取得します.
    redis> ZREVRANGEBYLEX phone + -
    1) "13352110901"
    2) "13310414300"
    3) "13300111100"
    4) "13252110901"
    5) "13210414300"
    6) "13200111100"
    7) "13132110901"
    8) "13110114300"
    9) "13100111100"
    

    セグメント132を取得:
    redis> ZREVRANGEBYLEX phone (133 [132
    1) "13252110901"
    2) "13210414300"
    3) "13200111100"
    

    132、133番のセグメントを取得します.
    redis> ZREVRANGEBYLEX phone (134 [132
    1) "13352110901"
    2) "13310414300"
    3) "13300111100"
    4) "13252110901"
    5) "13210414300"
    6) "13200111100"
    

    5.2名前のソート
    SortSetに名前を保存するには、次の手順に従います.
    redis> zadd names 0 Toumas 0 Jake 0 Bluetuo 0 Gaodeng 0 Aimini 0 Aidehua 
    (integer) 6
    

    すべての人の名前の逆配列を取得するには、次の手順に従います.
    redis> ZREVRANGEBYLEX names + -
    1) "Toumas"
    2) "Jake"
    3) "Gaodeng"
    4) "Bluetuo"
    5) "Aimini"
    6) "Aidehua"
    

    名前の大文字Aで始まるすべての人を取得します.
    redis> ZREVRANGEBYLEX names (B [A
    1) "Aimini"
    2) "Aidehua"
    

    名前の大文字CからZまでのすべての人を取得します.
    redis> ZREVRANGEBYLEX names [Z [C
    1) "Toumas"
    2) "Jake"
    3) "Gaodeng"