検索

ホームページ  >  に質問  >  本文

redis可以对key排序吗

hset user:1 score 100

hset user:2 socre 101

hset user:3 score 200

hset user:4 score 201

要找出socre最高的user,应该如何设计。

高洛峰高洛峰2763日前850

全員に返信(4)返信します

  • 天蓬老师

    天蓬老师2017-04-22 09:01:10

    hset を直接ソートすることはできません。 hset ソートと同等のことを実現する別の方法として、sort 関数を使用する方法があります。並べ替えは通常、リスト、セット、および zset のみを並べ替えることができますが、変更することができます。 sort の使用法は次のとおりです:
    SORTキー [BYパターン] [LIMITオフセット数] [GETパターン [GETパターン...]] [ASC | DESC] [ALPHA] [STORE先]

    byパラメータとstoreパラメータに注意してください。 by はどのフィールドで並べ替えるかを決定するために使用され、store は並べ替え結果をリストに保存できます。まず、すべてのハッシュ キーをセットに保存します。たとえば、このセットのキー名は myhashes です。次に、セット内の各要素 (つまり、各ハッシュ) のスコア フィールドに従って並べ替えて、最後に並べ替え結果を保存します。 in キー名が myresult のリスト内。ここでのソート結果は当然セット内の全要素のキー名(つまり全ハッシュキー)になります。 GETパラメータに#を付けることでセット内の全要素のキー名を取得できます。 :
    myhash を *-> スコアでソート GET # STORE myresult

    SORT は、BY パラメータの * を myhashes の各値 (つまり、各ハッシュ キー名) に置き換え、-> の後に指定されたフィールドに基づいてその値を取得し、最後にこれらのフィールドに基づいて myhashes の各値を比較します。値が並べ替えられます。このように、myresult にはスコアに従ってソートされたハッシュ キー名が含まれます。

    最後に、ハッシュの設計に何か問題があると思います。ハッシュは SQL データベースの行に似ており、複数のフィールドがあり、各フィールドには対応する値があります。スコア フィールドしかない場合は、zset の使用を検討してください。

    返事
    0
  • 黄舟

    黄舟2017-04-22 09:01:10

    HashSet没法直接排。得单独维护一个SortedSet、ユーザー ID と対応するスコアのみが保存されます。

    返事
    0
  • PHPz

    PHPz2017-04-22 09:01:10

    そういう意味なのかは分かりません
    コードをアップロードするだけです

    リーリー

    ドキュメント
    http://redis.cn/commands/sort.html

    返事
    0
  • 黄舟

    黄舟2017-04-22 09:01:10

    ハッシュはソートできません。

    並べ替える必要がある場合は、ZSET 操作を使用してください、ZADD SCORES メンバー

    アイデアは次のとおりです:

    リーリー

    もう一度言いますが、ハッシュがハッシュキーを保存するためにのみ使用されている場合、スコアをこのように保存することはお勧めできません..

    返事
    0
  • キャンセル返事