2016-04-07 12 views
1

C#でstackexchange.redis SDKを使用していて、ハッシュセットをスキャンしたいと考えています。 私はSDKがredisクライアントとして実行されることを期待しました( "hscan myKey 0"を実行すると、いくつかのキーと値のペアが返され、次のスキャンに使用するカーソルが返されます)。私は、次のように「hashscan」メソッドを実装するstackexchange.redis SDKを使用する場合でも:それは「MYKEY」内のすべてのフィールドを返しますstackexchange redis hashscan一度にすべてのフィールドを返す

redisCache.HashScan(myKey, pageSize:10, cursor: 0) 

を、その中に2000のキーと値のペアがあります。 一度に複数の結果を返すだけの方法はありますか?

原因「myKey」には何百万ものフィールドがありますが、すべてが一度に戻るとメモリが大量に消費され、オンラインサービスがブロックされますか?原因redisはシングルスレッドアプリケーションです。

ありがとうございます!

答えて

0

あなたがしていると思っていることはかなりありません。 HashScanメソッドは、最大2ページのデータを保持するカスタムイテレータを返します。 1ページの終わりに近づくと、自動的に次のページを取得します。本質的には、その後、あなただけが20項目を読み取る場合は、ちょうど20項目を読んで。たとえば、LINQs .Take(20)は正常に動作します。イテレータで.ToList()を呼び出すと、それは必要に応じて動的にデータをフェッチしながら、一方の端から他方の端まで歩きます。だから、: :)

物事ことをしない、それはは行いません。

  • はRedisの小規模のコールの多くを行うRedisのために単一の巨大な呼び出し内のすべてのデータをフェッチ前はサイドノートとしてHashScan方法

から戻る:カスタムイテレータは、カスタムINTEを実装しますあなたがそれを必要とするならば、をピックアップして再開できるようにするために、

関連する問題