問題タブ [booksleeve]
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.
c# - Redis BookSleeve ソケットの枯渇
BookSleeve を使用して Redis サーバーに接続し、エントリを追加/取得すると、SocketException が発生します。特定の例外は次のとおりです。通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の使用は 1 つだけ許可されます。
スタック トレースは次を指します。BookSleeve.RedisConnectionBase.Wait(Task task) in d:\Dev\BookSleeve\BookSleeve\RedisConnectionBase.cs:2050
私の質問は、コードで何か間違ったことをしているのか (可能性が高い)、接続を適切に閉じていないのか、それともその性質のものなのか? 例外は、約 60 秒で約 16000 回の操作が実行された後にスローされる傾向があります。操作の量が多すぎるとは思えませんよね?
関連するコードを以下に示します。その他の情報を提供させていただきます。
接続の取得 (これは主に BookSleeve 単体テストからコピーされたものです。
RedisConnection オブジェクトの汎用拡張メソッド:
c# - BookSleeve BlockingRemoveLeft は、リストにプッシュされたアイテムの一部のみを返します
BookSleeve に基づいて、非常に単純なキューイングのサンプルをまとめようとしています。
キューのコンシューマー側でこれまでに得たものは次のとおりです。
プロデューサーとしてLINQPadで以下を実行しています。
しかし、私はいくつかの本当に奇妙な結果を得ています:
1 回目の実行:
2 回目の実行:
3 回目の実行:
また、実行ごとに LINQPad が出力します: 、実際の redis クライアントを使用してqueue length: 0
実行すると が返されます。LLEN test
(integer) 0
ここで何かが欠けているように感じずにはいられません。ほとんどの場合、非同期のものに関係している可能性がありますが、それを見ることができません。
私の redis のバージョンは 2.8.3 で、BookSleeve のバージョンは 1.3.41 です。
ここでの実際の質問は、なぜ BookSleeve は redis リストに送信されたメッセージのサブセットのみを返すのですか?
c# - インスタンス プロパティ以外のリフレクションでオブジェクト プロパティを取得する
リフレクションを使用してすべてのオブジェクト プロパティを列挙したいが、オブジェクトを参照するプロパティを除外したい (Redis/Booksleve を使用したキャッシュ ソリューションで使用しているため、これは十分に高速である必要があります)。
現在、私は次のものを持っていますが、これはインスタンスメンバーを含むすべてのオブジェクトプロパティを返します:
c# - Redis と Booksleeve を使用してフォーラム メッセージを保存する
次のクラスの魔女がフォーラムにメッセージを保存しています
現在、これらのオブジェクトを、Json シリアル化を使用して文字列キー (Redis if course) に次のコード (簡略版) で格納することにより、Booksleeve でキャッシュしています。
私のフォーラム アプリケーション ビューでは、フォーラム スレッドに属する上記のメッセージのリストを表示するため、上記のフィールドのほとんどを利用しています。
ForumMessage クラスのリストを取得するには、mgetコマンドを使用します。
ユーザーが新しいメッセージを投稿するとき、またはメッセージに投票するときに、上記のフィールドのいくつかを更新する必要があります。更新するときは、 redis getを介してメッセージを取得し、必要なフィールド (ほとんどの場合 1 つまたは 2 つのフィールド) を更新してから、conn.store booksleeve メソッドを介して更新を保存します。
現在、ピーク時のフォーラムには、1 分あたり約 12 のメッセージと 1 分あたり 20 の投票が寄せられます (メッセージごとではない合計投票数)。
上記のより最適な解決策は、更新がより高速になるため、メッセージをredisハッシュに保存することであるかどうか疑問に思います。しかし、ハッシュを使用するために、redis で初期ストアを行うコードはより複雑 (遅く) になり、このコードは redis サーバーではなく Web サーバーで実行されます。
ハッシュを使用してメッセージストア/取得手順を再実装する価値があると思いますか、または、たとえばメッセージ挿入のレートが 30 メッセージ/分で増加した場合に、現在使用しているソリューションよりもうまくスケーリングできると思いますか?
本質的に、スタックオーバーフローがこの状況をどのように処理するかについて、いくつかのガイドラインを提供できますか?
redis - Stackexchange.Redis ConnectionMultiplexer.Connect() は接続に失敗しても何もしませんか?
Redis サーバーインスタンスに接続しようとしましたConnectionMultiplexer.Connect("127.0.0.1");
が、サーバーが稼働していないにもかかわらず、接続でエラーがスローされたり、ConnectionFailed
イベントが発生したりしません。スタンドアロン インスタンスも Windows Service of Redis も実行していないことを再確認しました。
接続が成功したかどうかを確認するにはどうすればよいですか? .Net 4.5 で実行し、StackExchange.Redis バージョン 4.0.30319 を使用しています
ありがとう