問題タブ [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.
redis - ランダムコマンドをredisに送信するにはどうすればよいですか?
c#/.NET でブックスリーブ経由で redis を使用しています
SCRIPT FLUSH
orのような未実装のコマンドを送信したいとしましょうEVAL
。ブックスリーブでこれを行うにはどうすればよいですか?また、エコーが実装されているかどうかもわからないので、例として使用するのはクールです。
c# - AzureからRedisに接続すると、断続的な例外が発生します
C#アプリケーションを実行しているWindowsAzureServerがあります。これは4つのメディアインスタンスで配布され、L2キャッシングにRedisを使用しています。このアプリケーションは、かなりの量のトラフィック(1日あたり約300,000ページビュー)を処理しています。私はRedis接続にBookSleeveを使用していますが、アプリケーションが起動して実行されると、BookSleeveから1分間に約4回SocketExceptionsがスローされ始めます。正確な例外は次のとおりです。
サーバーから何かを読んでいるときにのみ発生しているようです。
私のGetReadConnectionは次のように設定されています。
これで、作成者が説明するように、すべての書き込みが単一の接続を共有するため、これは、connection.Wait()の使用を必要とする読み取りでのみ発生します。それはすべてうまくいくようです。書き込みには、BookSleeveを使用して開いているRedis接続を維持するのと同様のコードを使用します
Azureロードバランサーを考慮してRedisサーバーのタイムアウトを変更しようとしましたが、成功しませんでした。ここで説明するように、タイムアウト30の設定とタイムアウト0の設定の両方を試しました:AzureVMでBooksleeveRedisクライアントを使用する場合のRedis接続エラー
どんな助けでも本当にありがたいです。
c# - BooksleeveでZINTERSTOREを実行するためのオプション?
私はC#でRedisドライバーとしてBooksleeveを使用していて、非常に満足していますが、並べ替えられたセットでいくつかの作業を行う必要があることに気付きました。これらはBooksleeve内で最小限のサポートしか持っていないようです。たとえば、ZUNIONSTOREやZINTERSTOREのようなコマンドの実装はありません。
これらの操作を実装したと主張するScobrownのBooksleeveのフォークをGithubで見つけましたが、NuGetの「公式」パッケージを使用しており、代わりに別のフォークに切り替えるかどうかはわかりません。
誰かがこのフォークを使用した経験がありますか?安定していて、本番コードに対して十分な信頼性がありますか?
それ以外の場合、ソートされたセットで交差点や結合などを実行する必要があるため、他の回避策を思いついた人はいますか?私は次のようなことをしています:
これには、セットの完全なコンテンツを一度に1つずつ取得し、IEnumerable<>.Intersect()
redis内で実行する代わりに、.NETを使用して交差を実行する必要があるという明らかな欠点があります。もっと良い方法はありますか?
c# - Booksleve での Redis トランザクション
以下の 3 つのコマンドは、そのまま実行すると完全に機能します。
しかし、それらをトランザクションでラップしようとすると、機能しなくなります。例外はスローされませんが、デバッグするとvar allKeys = ...
、トランザクションのセットアップ中に実行が停止するように見えますか?
redis - BooksleeveとRedisがどのように連携し、SignalRアプリでのアプリケーションであるかを誰かが正確に説明できますか?
SignalRアプリのスケールアウトを実装し、クラスター内の単一障害点を回避しようとしています。したがって、複数のRedisメッセージバスサーバーが必要です。
Redis Sentinelの実装に関する問題は、フェイルオーバー時に、クライアントが新しいエンドポイント[アドレス]に接続する必要があることです。これにより、SignalRアプリケーションを再起動する必要があります(Application_Start()で定義されたRedisエンドポイント)。
オプションではありません。
Booksleeveが役立つかどうか、どのように役立つかを理解しようとしています。これについて説明してもらいたいと思います。
問題は、メッセージバスに定義できるエンドポイントは1つだけであるということです。現在、ハードウェアソリューションはオプションではありません。
SignalRアプリケーションは、マスター/スレーブのリストを維持するBooksleeveラッパーに接続しますか?
AzureServiceBusを使用する別のオプション。ただし、Windows Azure Service Busプロバイダーの配線手順では、これにはまだ問題があることが示されています。
このWebサイトは、AzureWebロールで実行されるASP.NETサイトであることに注意してください。1.0alpha2の時点で、AzureWebSitesにいくつかのバグがあり、ServiceBusスケールアウトシナリオがうまく機能しないためです。私たちは将来のためにこれを解決するために取り組んでいます
c# - 日付範囲を使用してRedis(pub / sub)からチャネルデータを保存および取得するにはどうすればよいですか?
最初に、私がやりたいことではない.rdbファイルのクエリについて質問しました。アクティブなサーバーにクエリを実行します。
RDBスナップショットを使用して、pub/subシナリオでRedisを使用するプロジェクトを開始しようとしています。
.Net WCFクライアントは、 Marc Gravellの BookSleeveを介してRedis接続を構成し、着信要求を受け入れます。
RDBスナップショットを有効にすると、インクリメンタルスナップショットが作成されます。
クライアントが特定のチャネルと日付範囲に基づいてデータセットを取得できるようにしたい。読み取りと書き込みの両方に同じWCFクライアントを使用することを考えていました(特に異論がない限り)。サーバーにクエリを実行して日付範囲、チャネル固有のデータを取得し、それをWCFクライアント経由で配信するために使用する方法が完全にはわかりません。
BookSleeveを介してこのデータクエリ機能を実現できますか(もしそうなら、どのように)、またはServiceStack.Redisなど、使用するのに適した他のアクセスラッパーがありますか?
書き込みにはBookSleeveを使用し、クライアントとしてServiceStack.Redisを使用する方がよいでしょうか。
- アップデート -
スナップショットをデフォルトに設定しています:
Redis Admin UIでデータを閲覧すると、15分(900秒)後にキーに保存されているデータが表示されると思いますが、キーを検索するとチャネル名(およびその他のキー)が表示されますが、値は表示されません。
pub / subイベントは永続化されないため、チャネルデータをキャプチャして保存するための良い方法は何ですか?
booksleeve - BookSleeveを使用してオブジェクトのコレクションを保存する
私はRedisとBookSleeveの両方に不慣れです。BookSleeveとServiceStack.Redisのどちらを使用すべきかを評価しています。
ServiceStackの方がはるかにわかりやすいように見えますが、BookSleeveが提供するパイプラインのアイデアが気に入っています。
RedisとBookSleeveを実行していて、文字列の取得と設定は簡単ですが、pocosなどのオブジェクトのコレクションの設定と取得の例を見つけるのに苦労しています。
BookSleeveを使用してこれらを取得および設定するにはどうすればよいですか?
ありがとう。
c# - BookSleeveのConnectionUtils.Connect()を使用したRedisメッセージバスフェイルオーバーでのSignalRの使用
SignalRアプリを使用してRedisメッセージバスフェイルオーバーシナリオを作成しようとしています。
最初に、2台のRedisサーバーを監視するだけの単純なハードウェアロードバランサーフェイルオーバーを試しました。SignalRアプリケーションは、単一のHLBエンドポイントを指していました。次に、1つのサーバーに障害が発生しましたが、SignalRアプリプールをリサイクルせずに、2番目のRedisサーバーでメッセージを正常に取得できませんでした。おそらくこれは、新しいRedisメッセージバスにセットアップコマンドを発行する必要があるためです。
SignalR RC1の時点では、Microsoft.AspNet.SignalR.Redis.RedisMessageBus
Booksleeveを使用RedisConnection()
してpub/sub用の単一のRedisに接続します。
RedisMessageBusCluster()
Booksleeveを使用してConnectionUtils.Connect()
Redisサーバーのクラスター内のクラスに接続する新しいクラスを作成しました。
Booksleeveにはマスターを決定するための独自のメカニズムがあり、自動的に別のサーバーにフェイルオーバーし、現在これをでテストしていSignalR.Chat
ます。
でweb.config
、使用可能なサーバーのリストを設定します。
次にApplication_Start()
:
2つのメソッドを追加しましたMicrosoft.AspNet.SignalR.Redis.DependencyResolverExtensions
:
ここで問題となるのは、いくつかのブレークポイントを有効にすると、ユーザー名が追加されるまで、すべてのブレークポイントを無効にすると、アプリケーションが期待どおりに機能することです。ただし、ブレークポイントが最初から無効になっているため、接続プロセス中に失敗する可能性のある競合状態が発生しているようです。
したがって、RedisMessageCluster()
:
Task.Wait
と追加(上記には表示されていません)の両方を追加しようとしましたSleep()
が、待機中などでしたが、それでもエラーが発生しました。
繰り返し発生するエラーは〜ln71にあるようですBooksleeve.MessageQueue.cs
。
クローズドキュー例外がスローされている場所。
別の問題が予想されます。Redis接続が確立されているApplication_Start()
ため、別のサーバーへの「再接続」に問題が発生する可能性があります。RedisConnection()
ただし、これは、選択できる接続が1つしかない単数を使用する場合に有効だと思います。ただし、SignalRでこのシナリオがどのように処理されるかについて、または他のSignalRの担当ConnectionUtils.Connect()
者からの紹介を聞きたいと思います。@dfowler
c#-4.0 - BookSleeveを介してRedisMessageを逆シリアル化する適切な方法は何ですか?
Redis接続を処理し、BookSleeve機能を公開するために、次のシングルトンクラスを作成しました。
でOnMessage()
、var message = RedisMessage.Deserialize(data);
次のエラーのためにコメントアウトされています。
RedisMessageは、保護レベルが原因でアクセスできません。
RedisMessageはBookSleeveの抽象クラスであり、これを使用できない理由に少し固執しています。
この問題が発生したのは、チャネル(pub / sub)にメッセージを送信するときに、OnMessage()でメッセージを処理したい場合があるためです。たとえば、永続性フラグが設定されている場合、データの記録を開始することを選択できます。問題は、この時点でデータがシリアル化されていることです。データを(文字列に)逆シリアル化し、Redisで永続化したいと思います。
これが私のテスト方法です:
メソッドを使用できなかったためDeserialize()
、静的ヘルパークラスを作成しました。
残念ながら、これは文字列を元の形式に適切に逆シリアル化しておらず、私が得ているのは、実際の元のテキストではなく、異汢獩敨慶畬㩥ㄠのようなものです。
提案?
c# - BookSleeve を使用して Redis からソート済みセットを取得する適切な方法
いくつかの提案に従って、次のように時系列順にデータを保存するために、ZADD
BookSleeve を通じてRedis を使用しています。SortedSets.Add()
ServiceStack の AdminUI を使用すると、Redis に格納された値を確認できます。
値は UTC として保存されます。値の範囲を取得できるようにしたいと考えています。
簡単に言えば、最近値を保存したので、次のことを試しました。
VS では、コレクションには double 値と、Byte[] 型の Key が含まれます。これは保存されたデータのバイト配列だと思います-文字列として保存しましたが?
ここでいくつかのコードを確認しましたが、この関数の使用方法に関する詳細なドキュメントとサンプルがあるかどうかを知りたいですか?