1

ServiceStack.RedisC# でクライアントを使用しています。

次のパターンa::name::1を使用してtype1の約 500 万レコードを追加し、パターンb::RecId::1を使用してtype2の 1,100 万レコードを追加しました。

現在、redis 型のクライアントを として使用していますclient = redis.As<String>type2のすべてのキーを取得したい。私は次のパターンを使用しています:

var keys = client.SearchKeys("b::RecID::*");

ただし、キーを取得するには永遠に (約 3 ~ 5 分) かかります。

これを行うためのより高速で効率的な方法はありますか?

4

3 に答える 3

6

キースペースをスキャンする必要がないように、懸命に作業する必要があります。KYES文字通りサーバーストッパーですが、SCAN利用できる場合でも、そうしないでください。ここで、利用可能なセットのキーをどこかに保持することを選択できますが、 etc はありません - 2.では、 を使用する必要があります。少なくともそれらはすべて利用可能になります。それ以降のバージョンのサーバーでは、(think: ) および(think: )にアクセスできますが、最終的には何百万もの行が必要になるという問題があり、決して無料ではありません。SRANGESMEMBERSSCANKEYSSSCANSMEMBERS

可能であれば、マスター/スレーブ ペアを使用し、負荷の高い操作をスレーブで実行することで、影響を軽減できます。サーバーを強制終了している間、少なくとも他のクライアントは何かを行うことができます。

于 2014-04-01T20:38:47.447 に答える
0

Redis のキー コマンドは低速です (低速ではありませんが、時間がかかります)。また、実行中にサーバーが他のコマンドを受け入れるのをブロックします。

本当にすべてのキーを繰り返し処理したい場合は、代わりにscanコマンドを見てください。ただし、これに関する ServiceStack についてはわかりません。

于 2014-04-01T15:05:40.613 に答える
-1

コマンドを使用しSCANてループ検索を行うことができます。この場合、各検索は少数のキーに制限されます。完全な例については、次の記事を参照してください: http://blog.bossma.cn/csharp/nservicekit-redis-support-scan-solution/

于 2015-01-16T01:20:14.127 に答える