2016-08-28 13 views
0

私はローカルマシンにRedisインスタンスをインストールしています。このインスタンスには、147,848のシリアル化されたオブジェクトが含まれています。私はすべてのオブジェクトを取得し、いくつかのロジックを適用する必要があります。私はかつてので最初に、私はWindowsローカルホスト上のRedisパフォーマンス

var keys = client.GetAllKeys(); 

としてすべてのキーを取得し、私はJSONを取得し、

var keys = client.GetAllKeys(); 
foreach (string key in keys) 
{ 
    var sobj = client.Get<string>(key); 
    MyClass desobj = JsonConvert.DeserializeObject<MyClass>(sobj); 
    myList.Add(desobj); 
} 

としてそれらをデシリアライズするためのキーを反復処理では、すべてのオブジェクトを取得する方法がないことを知ることがカムすべてのキーを取得し、すべてのオブジェクトを取得してデシリアライズするこのプロセスは、約32秒となります。 015万オブジェクト

  1. すべてのキー取得するため

    は0.4秒

  2. 取得すべての値が16秒
  3. デシリアライズした取った6秒

1を有する別のRedisのインスタンスがあります百万個のオブジェクトと

  1. すべてのキーを取得すると、すべての値を取得する2秒
  2. を取ったが、64秒
  3. を取ったデシリアライズは29秒に

を取ったパフォーマンスを改善する方法はありますか?

答えて

0

私はあなたが複数のスレッドを使用してパフォーマンスを向上させることができると思います。 Redisはシングルスレッドアプリケーションであり、永続性の獲得はDeSerializingステップで行われません。

私があなただったら、すべてのキーを取得し、すべての値を取得し、すべての値を非直列化するために必要な時間を測定します。この情報を使用すると、どの部分が最も遅いかを理解することができます。

+0

ボトルネックは前後に往復しているので、私はいくつか考えています:赤目の代わりにメモリ内の辞書を使用できますか?値は小さくて大きなオブジェクトに統合できますか?読取りを並列化できるように、複数のredisインスタンスを使用できますか? –

関連する問題