0

Redisは非常に高速です。私のマシンのほとんどの部分は、node.jsのネイティブJavascriptステートメントまたは関数呼び出しと同じくらい高速です。コールバックが必要ないため、node.jsで通常のJavascriptコードを書くのは簡単で簡単です。node.jsを使用してRedisでキー/値データを取得/設定するのがそれほど簡単ではない理由がわかりません。

node.jsとRedisが同じマシン上にあると仮定すると、ブロッキング呼び出しを使用してnode.js上のRedisと対話できるnpmライブラリはありますか?私はこれがV8とインターフェースするC/C++ライブラリでなければならないことを知っています。

4

4 に答える 4

11

すべてのredis挿入操作が実行されたことを確認したいと思います。これを実現するには、MULTIコマンドを使用してキーを挿入したり、その他の操作を実行したりできます。https://github.com/mranney/node_redisモジュールは、マルチオブジェクトにプッシュされたコマンドをキューに入れ、それに応じて実行します。

そうすれば、exec呼び出しの最後に1つのコールバックだけが必要になります。

于 2011-05-23T23:17:45.307 に答える
10

これは、Node.js のイベント型プログラミング モデルに慣れようとしている開発者にとって、よくある落とし穴のようです。

何が起こるか: 非同期/コールバック パターンが適切ではない状況に遭遇し、ブロック コードを実行する何らかの方法が必要であると判断し、Node でのブロックについて Google/StackExchange に問い合わせたところ、すべてが得られました。ブロッキングがいかに悪いかについての警告です。

その通りです - ブロッキング (「他のことをする前にこの結果を待つ」) は Node.js でやるべきことではありません。しかし、もっと役立つと思うのは、99.9% の確率で、ブロッキングを行う方法を実際に探しているのではなく、アプリを作成する方法を探しているだけだということを理解することです。「この結果を待ちます。それを行う前に」、これはまったく同じではありません。

あなたがやろうとしていることにより明確に適合する可能性のあるいくつかの設計パターンについて、Node での「ブロック」ではなく「フロー制御」のアイデアを調べてみてください。チェックアウトするライブラリのリストは次のとおりです。

https://github.com/joyent/node/wiki/modules#wiki-async-flow

私もNodeは初めてですが、Asyncを本当に掘り下げています:https://github.com/caolan/async

于 2012-06-23T14:51:45.587 に答える
7

コードをブロックすると、大きなボトルネックが生じます

ブロッキング コードを使用すると、サーバーが信じられないほど遅くなります

ノードはシングルスレッドであることを忘れないでください。したがって、ブロッキング コードは、接続されているすべてのクライアントのノードをブロックします。

あなた自身のベンチマークは、 1 つのクライアントに対して十分に高速であることを示しています。1000 クライアントでベンチマークしましたか? これを試してみると、ブロックコードが悪い理由がわかります

于 2011-05-23T15:14:53.063 に答える
0

Redis は高速ですが、瞬間的ではありません。これが、値がそこにあることを確認して実行を継続したい場合、コールバックを使用する必要がある理由です。

これを達成できると私が思う唯一の方法(そして、そうすることを提案しているわけではありません) は、タイマーを終了するための述語である変数を使用してコールバックを使用することです。

于 2011-05-23T15:14:04.147 に答える