18

データ ストリームに対して何らかの分析を実行し、その結果を Redis チャネルで公開しています。消費者はこれらのチャネルに登録し、リアルタイムのデータ フィードを取得します。履歴データの分析結果はすべて失われます。

ここで、Redis に履歴データを保存する機能を追加して、コンシューマーがこの履歴データを (主に時間ごとに) クエリできるようにします。分析結果は時間ごとに分割されるため、結果を Redis に保存するのに適した設計は何でしょうか?

4

1 に答える 1

39

redis sorted setsを使用します。

ソートされたセットは「スコア」に基づいてデータを保存するため、あなたの場合はミリ秒単位のタイムスタンプを使用してください。データは自動的に並べ替えられ、開始日と終了日の範囲を使用して履歴項目を取得できます。例を次に示します...

ソート済みセットに項目を追加...

zadd historical <timestamp> <dataValue>

..いくつかのサンプルデータを追加..

 zadd historical 1 data1
 zadd historical 2 data2
 zadd historical 3 data3
 zadd historical 4 data4
 zadd historical 5 data5
 zadd historical 6 data6
 zadd historical 7 data7

..開始/終了範囲を使用して項目のサブセットを取得します...

 zrangebyscore historical 2 5

..戻り値...

1) "data2"
2) "data3"
3) "data4"
4) "data5"

したがって、あなたの場合、最終日のすべての履歴アイテムを取得したい場合は、これを行うだけです...

zrangebyscore historical <currentTimeInMillis - 86400000> <currentTimeInMillis> 
于 2013-06-17T18:36:08.063 に答える