ZADD myset 1 ad1
ZADD myset 1 ad2
SET order:ad1 1
SET order:ad2 2
最初に順序付けられたスコアと順序値でソートする方法はありますか?Redis:別のキー値で同じスコアの並べ替えられた順序付けられた結果を並べ替えることが可能です
ZADD myset 1 ad1
ZADD myset 1 ad2
SET order:ad1 1
SET order:ad2 2
最初に順序付けられたスコアと順序値でソートする方法はありますか?Redis:別のキー値で同じスコアの並べ替えられた順序付けられた結果を並べ替えることが可能です
データを格納する方法を変更しないで結果を保存する場合は、SORTコマンドを使用できます。 zsetに適用することができます。例えば
:
> zadd myset 1 albert
> zadd myset 1 joseph
> zadd myset 4 bertrand
> zadd myset 2 casimir
> zadd myset 3 alfred
あなたが値で並べ替えることができます。
> sort myset alpha
1) "albert"
2) "alfred"
3) "bertrand"
4) "casimir"
5) "joseph"
あなたはスコアと値で並べ替えることができます。
> zrange myset 0 -1
1) "albert"
2) "joseph"
3) "casimir"
4) "alfred"
5) "bertrand"
は、今度は、これらに新しいプロパティを追加してみましょうオブジェクト:
ZSETでの順序プロパティを実体よりも、あなたはスコアの順プロパティでソートする必要がある場合> sort myset by order:*
1) "casimir"
2) "bertrand"
3) "alfred"
4) "joseph"
5) "albert"
は今、あなたは他の選択肢を持っていない、またはマテリアライズ:あなたは新しい秩序のプロパティで並べ替えることができます
orderプロパティのスコアZSET順序プロパティを追加たとえば
、我々は得る:
> del myset
> zadd myset 1 5:albert
> zadd myset 1 4:joseph
> zadd myset 4 2:bertrand
> zadd myset 2 1:casimir
> zadd myset 3 3:alfred
> zrange myset 0 -1
1) "4:joseph"
2) "5:albert"
3) "1:casimir"
4) "3:alfred"
5) "2:bertrand"
注意:その場合、プロパティフィールドは辞書式順序に従ってソートされ、値は正規化されなければならないので数字の順序と複数の数字が必要な場合。これを行うには様々なトリックがあります。たとえば、 "1"、 "12"、 "123"を保存する代わりに、数字の桁数を表す最初の数字 "11"、 "212"または "3123"を保存することができます。
scoreとorderプロパティの両方を変更できる場合、これはあまり便利ではなく、クライアント側でソートする方が効果的です。これは、2回のラウンドトリップで、一方の側でスコアを持つzsetを取得し、他方の側で対応する順序値を取得することによって達成できます。
> zrange myset 0 -1 withscores
> sort myset by order:* get order:* get #
クライアントが2つの結果(ある種の辞書または連想配列を使用して)を結合し、最終結果を得るまでソートします。