2017-11-05 5 views
0

私たちは、このようにREPLのRedisの-CLIを使用してのRedisで3ハッシュを作成しました:ソート

hmset redishop:items:Articulo1 artist "Martin Wessely" price 12.99 name "Handcrafted Trees Mug" 
hmset redishop:items:Articulo2 artist "Martin Wessely" price 13.99 name "Handcrafted Trees Mug" 
hmset redishop:items:Articulo3 artist "Martin Wessely" price 14.99 name "Handcrafted Trees Mug" 

私は構造がRedisのでOKに作成されているチェックし、これらがあります。

hgetall redishop:items:Articulo3 

は、今、私たちは、このようにセットにハッシュを追加します。我々は、コマンドSORTで遊んでいる

sadd redishop:list-all redishop:items:Articulo3 
sadd redishop:list-all redishop:items:Articulo2 
sadd redishop:list-all redishop:items:Articulo1 

SORT redishop:list-all BY redishop:items:*->price 
SORT redishop:list-all BY redishop:items:*->price GET redishop:items:*->price 
SORT redishop:list-all BY redishop:items:*->price GET # GET redishop:items:*->price 

結果が決して得られません。セット内のハッシュは、値がnullのため、わかりません。他の手で

我々はハッシュを作成し、この他の方法で設定している場合:このように

multi 
hmset redishop:items:Articulo1 artist "Martin Wessely" price 12.99 name "Handcrafted Trees Mug" 
sadd redishop:list-all Articulo1 
hmset redishop:items3:Articulo2 artist "Martin Wessely" price 13.99 name "Handcrafted Trees Mug" 
sadd redishop:list-all Articulo2 
hmset redishop:items3:Articulo3 artist "Martin Wessely" price 14.99 name "Handcrafted Trees Mug" 
sadd redishop:list-all Articulo3 
exec 

コマンドSORTは完璧に動作し、ハッシュがセットに挿入されている、しかし、私は、なぜベースで理解しませんレディスのドキュメント:

  1. コマンドマルチのみトランザクションブロックの開始をマークします。後続のコマンドは、EXECを使用してアトミック実行用にキューに入れられます。

  2. 私は、キーのキーでハッシュを作成します:キー:キーは、私が使用している場合は無関心である:か、または - 私たちはドキュメントをに従って構造のツリーを作成していないRedisの中で、最も重要: https://redis.io/topics/data-types-intro

これは、あなたには良いか良い方法が含まれていると言っています:またはドットが含まれていますが、彼は構造ツリーを作成しています。そして、私はredishopの代わりにArticulo1をタイプした場合、セットにハッシュを追加するとき、なぜunderstadnをしないのですか?item:Articulo1はOkですが、oherの場合は間違っていますか?実際にあなたがhgetall Articulo1を入力すると、あなたはnullを受け取るが、hgetall redishopとタイプすると:items:Articulo1あなたは全てのFelsに値を与える。それは非常に奇妙である。

  1. execはすべての文章のみを実行します。これらの理由は同じである必要があります。

この件に関するヘルプや説明は大きな助けになります。 ありがとうございます。

答えて

1

今、私たちはSORTの時間の複雑さとメモリ要件の用心SORT

コマンドで遊んでいる、私は通常それを使用しないことをお勧めします。

私たちは決して結果を得ることはありません。セット内のハッシュは値nullであり、なぜ私は理解できませんか?

問題は、SORTを呼び出してGET句とBY句を指定する方法にあります。あなたのセットのメンバーが(ハッシュ)完全なキーの名前なので、ここにあなたがあなたの例のデータでそれを行う必要があります方法は次のとおりです。

コマンドSORTは、この場合、完全に

動作します。このように

127.0.0.1:6379> SORT redishop:list-all BY *->price 
1) "redishop:items:Articulo1" 
2) "redishop:items:Articulo2" 
3) "redishop:items:Articulo3" 
127.0.0.1:6379> SORT redishop:list-all BY *->price GET *->price 
1) "12.99" 
2) "13.99" 
3) "14.99" 

Setにキー名の "id"部分のみを設定するので、GET句とBY句は実際のデータにマッピングされます。明確にするために、これはブロックMULTIの使用(または不足)とは関係ありません。

+0

わかりません。ごめんなさい。 – charles

+0

furthemoreそして最も重要なのはなぜ、私がブロックマルチの間にハッシュを挿入すれば、私は自分のキーの最後のIDとSORTの仕事を私が望むように参照できるのですが、私がマルチから同じものを作るなら、同じ?申し訳ありませんが、ツールのバグのように見えません。 – charles

+0

同じセットの場合、私は鍵redishop:item:carsとredishop:itemsBig:truckと他のものとのハッシュを持っていて、トラックの価格が欲しい。私はそれをすることはできませんか?たぶん、ドキュメントの中で私がそう思っているようなことはない......最も奇妙なのは、私が同じことをしてもマルチブロックとキーの最後のIDを参照すると、後で私が望むようにSORTを使うことができるからです。 – charles