2016-04-29 15 views
1

saddを使用してセットにメンバーを挿入すると、データが挿入される確定的な方法がありますか?例えば 、Iは「スタックオーバーフロー」を挿入したとき、それは、前のクエリのように最後のインデックスの代わりに、インデックス2に示されている「ハロー」、見えることができるようスミス:挿入順序はどのように決定されますか?

127.0.0.1:6380> smembers test 
1) "hello world" 
2) "hello" 
3) "hello world 1234212" 
4) "hello world 123" 

127.0.0.1:6380> sadd test "aman" 
(integer) 1 

127.0.0.1:6380> smembers test 
1) "hello world" 
2) "hello" 
3) "hello world 1234212" 
4) "hello world 123" 
5) "aman" 

127.0.0.1:6380> sadd test "stack overflow" 
(integer) 1 
127.0.0.1:6380> smembers test 
1) "hello world 1234212" 
2) "hello world 123" 
3) "hello world" 
4) "aman" 
5) "stack overflow" 
6) "hello" 

。その行動の説明はありますか?

答えて

1

セットはハッシュテーブルを使用して実装され、確定的です。しかし、あなたがSMEMBERSから手に入れた注文は、あなたが期待しているものであるということではありません。

辞書編集の順序が必要な場合は、すべてのメンバーのスコアが同じ(たとえばゼロ)のソートセットを使用します。

+0

「決定的でない」という意味ですか?同じメンバーセットでスムーマーを使用すると、メンバーは常に1つの順序でメンバーを返します。だから、新しいメンバーを追加すると、注文が変わるかもしれないし、物事がシーンの後ろで変化していることを理解しようとしている。 –

+0

私は決定論的な意味を持っていました。ハッシュテーブルの動作やバケットの衝突などを理解するためにハッシュテーブルを読んでいました。次に、Redisには、Hashの2つの異なるエンコーディングがあることに注意してください(サイズと設定の指示に応じて、どちらか一方を使用することができます)。 –

0

あなたはソートセットをしたい場合、あなたはセットからそれらを取得するために項目を追加するZADDを使用し、ZRANGE必要があります。ソートされていないセットで

127.0.0.1:6379> zadd sorted 1 "z" 
(integer) 1 
127.0.0.1:6379> zadd sorted 1 "stackoverflow" 
(integer) 1 
127.0.0.1:6379> zadd sorted 2 "a" 
(integer) 1 
127.0.0.1:6379> ZRANGE sorted 0 -1 
1) "stackoverflow" 
2) "z" 
3) "a" 

SADDSMEMBERS作品。