2016-12-20 6 views
2

私は以下のキーでハッシュセットを保存しています:measurement:<current_timestamp>、f.e. measurement:1482236501103とし、後で特定のタイムスタンプを渡して、指定されたタイムスタンプから最後まですべてのレコードを取得したいと考えています。しかし、レディスはレコードを注文しないので、私が考えることができる唯一の解決策は、各キーをチェックすることです - その名前からのタイムスタンプが与えられたものより "大きい"かどうか。与えられたものからハッシュセットを取得する -

良い方法がありますか?

答えて

2

実際、この種のクエリにはより良い方法があります。

ソートセットに測定値を格納する - スコアにタイムスタンプを保持し、要素自体が測定値です。セット内のメンバは一意でなければならないが、測定値を繰り返すことができると仮定しているため、値を格納する代わりにタイムスタンプをプレフィックスとして使用し、メンバを一意にする。それは、時間123であなたが値987を測定した場合、次のコマンドを使用してのRedisに保管しましょうということを意味します

ZADD measurements 123 123:987 

抽出するために、クエリを実行ZRANGEBYSCOREを使用して、クライアントアプリケーションで応答を処理するには連結タイムスタンプの値:valueメンバー。

0

@Itamar Haberが提案したものと似たようなことをしました。私はSorted Setsを利用してtimestampscoreとしましたが、私が格納している値は文字列化されたJSONオブジェクトなので、オブジェクトの別のプロパティとしてタイムスタンプを追加しました。

そして、さらに、記録を最後に与えられたタイムスタンプからすべて記録を取得することができるように、私はちょうどソートセットで最後に入力レコードのタイムスタンプを保持するキー"measurement:last"を追加しました。このようにしてZRANGEBYSCOREを使用し、与えられたタイムスタンプをstartとし、最後のものをendとします。

+0

Sounds great :) –

関連する問題