2017-12-27 2 views
0

Redisには入力値を表す文字列があります。私たちは(GUIを使ってユーザが定義した後に)入力文字列に基づいて結果文字列を計算する動的に生成されるLuaスクリプトを持っています。入力値の各セットは、互いに独立しています。したがって、これは並行処理が可能でなければなりませんが、完了するまでEVALがブロックされているようです。複数のRedis値に対して1つのLuaスクリプトを並列に実行するには?

Redisでは、スクリプト自体を書き直すことなく、複数の値にわたって単一のLuaスクリプトを実行する方法はありますか?

答えて

1

Redisはシングルスレッドサーバーとして実装されているため、同じクライアントから複数のコマンドを並行して実行することはできません。 しかし、複数のコマンド(scriptコマンドが含まれています)を複数のクライアントで実行できるようにする必要があり、RedisはそれらをIOループでインターリーブします。

と言えば、Redisは超高速であるだけでなく、柔軟性もあります。 は、次のいずれかのオプションを検討してください:

  1. はRedisのは、自分でモジュールコマンドを追加したり、好みに新しいコマンドを追加書きます。
  2. マルチシャード環境を考えてみましょう。これにより、個々のredis-server(またはシャード)を独立して実行できるようになりますが、コールを正しいシャードに送ることができます。これは多少の労働集約的なものです。この解決策を検討する場合は、問題についてさらに教えてくれることを教えてください。

すべてベスト!

+0

ええと、私は人為的に私の行をシャードする必要があるように聞こえます。何かのように、各行のsha1を計算し、次にmodulus nを計算します。ここでnは私のシャード数です。そして、少なくとも私はそのようにいくつかの負荷を共有します... – ArtB

+0

正確には - _key_ (エントリの値をハッシュの入力として考慮しないでください)、そうでなければ、値を更新するときに(キー、値)のペアを移行する必要があります。 –

+0

さらに、商用のものだけでなく、あなたのためにこれを行うオープンソースのプロキシもあります。 –

関連する問題