はので、ここで、私たちは同じことを話していることを確認しましょセットソートのRedisのための用語です:
ZADD key score member [score] [member]
summary: Add one or more members to a sorted set, or update its score if it already exists
key
を - ソートの 'name' が
score
を設定します - スコア(この場合はタイムスタンプ)
member
- スコアが関連付けられている文字列
- ソートされたセットには、スコアを持つメンバーが多数あります
JSONでエンコードされたオブジェクトの文字列をメンバーとして使用しているようです。メンバは、ソートされたセットで一意です。あなたが言うように、オブジェクトが変更された場合、ソートされたセットに新しいメンバーとして追加されます。それはおそらくあなたが望むものではありません。
ソートセットは、データをタイムスタンプで保存するRedisの方法ですが、セットに格納されているメンバーは通常、Redisの別のキーへの 'ポインタ'です。私はあなたがこのデータ構造をしたいと思うあなたの説明から、
:
- Aが作成したタイムスタンプ
- によってそれぞれのユニークなメディア
のための文字列またはハッシュをすべてのメディアを格納し、私は保存をお勧めしますソートこのようにメディアオブジェクトをハッシュ形式にすることで、より柔軟な操作が可能になります。 例:
# add some members to our sorted set
redis 127.0.0.1:6379> ZADD media 1000 media:1 1003 media:2 1001 media:3
(integer) 3
# create hashes for our members
redis 127.0.0.1:6379> HMSET media:1 id 1 name "media one" content "content string for one"
OK
redis 127.0.0.1:6379> HMSET media:2 id 2 name "media two" content "content string for two"
OK
redis 127.0.0.1:6379> HMSET media:3 id 3 name "media three" content "content string for three"
OK
このように保存されたデータを取得するには2つの方法があります。特定のタイムスタンプ範囲(たとえば、過去7日間)内にメンバーを取得する必要がある場合は、ZREVRANGEBYSCORE
を使用してメンバーを取得してから、各ハッシュをHGETALL
などとフェッチするためにそれらをループする必要があります。サーバーへの1回の呼び出しでループを実行する方法については、pipeliningを参照してください。
redis 127.0.0.1:6379> ZREVRANGEBYSCORE media +inf -inf
1) "media:2"
2) "media:3"
3) "media:1"
redis 127.0.0.1:6379> HGETALL media:2
1) "id"
2) "2"
3) "name"
4) "media two"
5) "content"
6) "content string for two"
あなただけの最後のnメンバー(または、例えば:10最近のほとんどの生誕100に最新)を取得したい場合は、アイテムを取得するためにSORT
を使用することができます。構文と異なるハッシュフィールドを取得し、結果やその他のオプションを制限する方法については、sort documentationを参照してください。
redis 127.0.0.1:6379> SORT media BY nosort GET # GET *->name GET *->content1) DESC
1) "media:2"
2) "media two"
3) "content string for two"
4) "media:3"
5) "media three"
6) "content string for three"
7) "media:1"
8) "media one"
9) "content string for one"
NB:のみのRedis 2.6から作品スコア(BY nosort
)でソートされたハッシュをソートします。
最後の日、週、月などのメディアを取得する予定がある場合は、それぞれに個別のソートセットを使用し、古いメンバーを削除するのにZREMRANGEBYSCORE
を使用することをお勧めします。これらのソートセットでSORT
を使用するだけで、データを取得できます。
ありがとう、私は正確なものを探していた。簡単な質問:私は重複したくない状況があるので、ソートされたセットでそれらをチェックし、それらを追加してハッシュを作成しています。私はそれが過度のものかどうか尋ねたがっていますか? –