問題タブ [node-redis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Redis コールバックを正しくネストする
snmp トラップを受信し、それらを redis ハッシュ データベースに格納する node.js プログラムを作成しています。私は Node.js で長い間プログラミングを行っていないため、自分のコードがどのように実行されているかを完全には理解していないと思います。
一部の redis 呼び出しが他の呼び出しより先に終了しているように感じます。そのため、コールバック関数ですべてをネストしようとしましたが、これを適切な方法で行っていないのではないかと心配しています。
私の出力は、達成したいものに近づいているように見えますが、最初に受信したトラップの世代番号が 1 で、次に受信したトラップは 11 または 111 であるなど、いくつかのランダムな懸念がポップアップします。私がしているのはclient.incr
、整数に対して redis 関数を実行することだけです。
簡単に言うと、2 つのハッシュ キーを使用して、受信した現在および過去のトラップを追跡しています。2 つの数値生成とハッシュ番号を個別の整数キー値として追跡し、必要に応じて増分します。これら 2 つの数値は、現在および過去のトラップ ハッシュの値を作成してアクセスするために使用されます。
これが私のコードです。
これが現在の出力の一部です。
これが私の履歴出力の一部です。
javascript - Redis で Socket.IO をスケーリングしてから、Redis 自体をスケーリングする
Node.js と socket.io をしばらく使用した後、自分のアプリケーションで最大 100 万人の同時ユーザーをサポートするには、それをスケーリングする必要があることを理解しました。そのため、Redis を使用してPUB/SUB
ソケット間のメッセージを送信し、多くのソケットを実行するようになりました。 .io サーバー インスタンスは、同じマシンと他のマシンにありますが、すべての socket.io サーバーは同じ Redis サーバーで動作します。
これは私に考えさせます:ポイントは何ですか?さらにいくつかの redis サーバーが必要で、それらの間でスケーリングする必要がありますか? 私のポイントは、それらが常にトップサーバーのボトルネックになるということです.
私の質問は、Redis をスケーリングすることは可能ですか? はいの場合、別の socket.io サーバーに接続されているすべてのソケットが Redis サーバー間で PUB/SUB できるようにするにはどうすればよいですか?
redis - Redis でのパブリッシュ/サブスクライブ メッセージの「アーカイブ」
Redis のパブリッシュ/サブスクライブ機能を使用しています。したがって、サーバーは 10 個のアイテムを公開し、クライアントはそれらの 10 個のアイテムを取得します。
ただし、新しいクライアントがフィードを購読します。新しいアイテムだけでなく、以前の 10 個のアイテムも入手してもらいたいです。
Redis には、パブリッシュおよびサブスクライブ機能を使用してこれを行う方法がありますか? フィード履歴はデータベースのどこかに保存されていますか? これを行う簡単な方法はありますか?メッセージをリストに保存し、クライアントにリストを実行させる最良の方法はありますLRANGE my_list 0 10
か?
node.js - ExpressJS:redisがダウンしている場合はどうすればよいですか?
問題のコード:app.js
node_redisを使用してnode.jsアプリからRedisに接続しようとしています。ただし、Redisがダウンしている場合の対処方法がよくわかりません。
私はたくさんのを持っていますがclient.on('error', function(err) {})
、それらは決して呼ばれていないようです。それを処理する適切な方法ですか?私はそれを間違って呼んでいますか?
redis / node / expressを使い始めたばかりなので、無知を許してください。
編集Vadimが私に気づかせてくれたように、私は実際client.on('error')
にapp.jsでエラーを適切にキャッチしているようです。ただし、redisがダウンしているときにエラーをキャッチできないのは私のルートです。
javascript - NodeJS の EXEC コールバックでランダムに null を返す Redis MULTI トランザクション
null
EXEC のコールバックがいくつかの値をsとしてランダムに返すという問題があります。
ほとんどの場合、コードは正常に動作しますが、ランダムに失敗します (または、ブラウザーを繰り返し更新すると)...
失敗するところまで縮めたコードを次に示します。
正常に動作すると、exec コールバックは次を返します。
動作しない場合、これを返します: (null
値に注意してください)
node.js - node_redis の使用時に hgetall に渡されたキーにアクセスするにはどうすればよいですか?
node.js (express) アプリケーションがあり、node_redis を使用して redis db からすべてのユーザーを取得しています。
これにより、次の結果が生成されます。
ここで、user_id をユーザー結果に追加したいので、次の出力を取得できます。
私が抱えている問題は、client.hgetall()が非同期的に呼び出され、 for ループで user_id に単純にアクセスできないことです。
node.js - node.js Redis パッケージの更新は Redis データベースをクリアしますか?
最近、node.js Redis パッケージを更新しました。今、私のデータはなくなっているようです。更新するとすべてのデータが削除されますか?
node.js - ブラウザに登録していないエクスプレスでクッキーセッションを更新する
次のように、機能するログインテストを設定しました。
ルートとユーザー ロジックは、私の問題とは無関係だと思うので省略しますが、必要に応じて喜んで共有します (非常に小さいため、概念の小さな証明を実行するためだけです)。 .
ログインが機能し、セッションが機能し、セッション値に基づいてテンプレートがレンダリングされます。 私の問題は maxAge/expires にあります。問題がどこにあるのかわかりませんが、説明してみます。
ログインすると、セッションが で保存passport.js
され、正しく保存さRedisStore
れ、セッションを指す Cookie がブラウザに返されます。後続のリクエストでは、Cookie が正常に検出され、 my からの正しいセッションを指していますSessionStore
。req.session.cookie
UPDATEDexpires
を表示し、私のredis
サーバーでは、TTL が 10 分 (600) にリセットされます。
私の問題は、Cookie がブラウザー (Chrome、Windows、および Mac) で同じ有効期限にとどまることです。
だから私の質問は:どうすればこれをさらにデバッグできますか? req.session が (によってexpress
、passport
およびconnect-redis
内部的に/自動的に) 更新されるので、問題がどこにあるのか、これを修正するにはどうすればよいのか疑問に思っています: Cookie は最初の maxAges/expires のままです。
ヒント、ポインタ、またはアイデアをいただければ幸いです。
node.js - node_redishgetallコールバック関数のCoffeescript変数スコープ
私は次のコードを持っています:
何をしても、getLeagueInfoのLeagueIdまたはuserLeagueIdにアクセスできません。外部ラッパーでは問題なく動作しますが、コールバック関数内ではアクセスできません。
私は何が間違っているのですか?
助けてくれてありがとう。
[編集]コールバックへのhgetall呼び出しを介して、それをパラメーターとして関数に渡す方法はありますか?
フレッド
node.js - node_redishgetall関数で未定義のプロパティ「長さ」を読み取れません
エラーを生成する次のコードがあります:
キーが正しいことを確認し、getLeagueInfoが正しい戻り値で正しく実行されましたが、その間にundefinedのCannotreadプロパティ'length'を取得しました。デバッグはそれがhgetallにあると言います。
node_redisでデバッグメッセージをオンにしました
そのため、リクエストを送信して結果を取得した後にエラーが発生します。
何がエラーを引き起こしている可能性があるのか、あるいはそれをデバッグするための最良の方法はありますか?