2017-08-11 12 views
0

私は在庫データを市場から取得し、それらをredisに置くには、 現在のデータ形式は[株価、日付、利益]、 私の最も多くの操作はインターバル日からの在庫リスト、例えば stock_id_list:(203,512,532)、date: '20050101'から '20151231'redisデータ構造は、株価日復帰を保存する

mysqlのクエリデータが非常に遅い場合は、

私はあなたがにSortedSetを使用することができますが、私はこれらのデータを格納するためのRedisデータ構造の設計を支援したい、とすぐに

+0

ソースデータの例と、クエリの結果として受け取ることを期待してください。あなたが特定の時間内に特定の株式の利益を得るかどうかは明らかではありません –

答えて

1

それらを照会することができます。値として日付を使用し、メンバとしてjsonに他の人を作る。照会するときは、zrangebyscoreを使用します。 Redis in ZADD doc:

スコア値は、 の精度の浮動小数点数の文字列表現である必要があります。 + infと-infの値は有効な値である です。

したがって、日付を数字に変換し、タイムスタンプまたは日数フォームを早い時点で使用するか、日付を数字などに変更する必要があります。注意すべき2017年8月11日の一つ

20170811のもの:スコアを繰り返すことができるが、メンバーが指定されたメンバーは、すでにソートセットのメンバーである場合、スコアが、ソートセットにすることはできません

更新され、要素は正しい順序で確実に正しい位置に再挿入されます。

したがって、uuidやredisに挿入するタイムスタンプなどの在庫データを一意にする必要があります。

+0

ありがとう、私が心配する最大の問題はメンバーの反復価値です、あなたは私がUUIDまたはタイムスタンプを使用することができると言うが、あまりにも大きな数字であるequリターンと比較して、クエリの後に私は文字列を分割する必要があります。これは大きなコストになります –

+0

私の答えによると、redisに在庫アイテムを保存するときは、あなたのストックオブジェクト(またはdict)を文字列に変換するjsonのダンプ。あなたがredisから取り出すときには、必要な情報を得るためにdictに文字列をロードする必要もあります。シリアライズとデシリアライズは避けられません。赤くなると複雑な構造は保存されません。しかし、実際には時間コストは文字列の長さです。 – GuangshengZuo

関連する問題