問題タブ [stackexchange.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.
c# - StackExchange.Redis SetAdd(key, val) がキー = GUID でクラッシュする
との非常に厄介なクラッシュStackExchange.Redis
SetAdd(key, val)
。
プログラムの GUID をキーにセットを設定したい。
(3 時間のデバッグ後)SetAdd(key, val)
一部の GUID で動作することがわかりましたが、他の GUID ではクラッシュします。
違いは最後の文字「9」対「7」
SetAdd
ローカル GUID をキーとして使用できませんか?
環境: C# .NET 4 Win 8.1 VS2013
クラッシュ メッセージ:
クラッシュポイントStackExchange.Redis
...
このコードを LINQPad でテストしました。同じところに落ちます。最初の GUID は機能しますが、2 番目の GUID は機能しません。
クラッシュはこれが原因ではなく、開始アプリの GUID であると思われます。
異なる GUID でさらにテストします。「7」で終わるものだけがクラッシュします。
...
KeyExists
、 StringIncrement
、StringSet
key = my GUID でうまく機能します。
redis - StackExchange.Redis - EVALSHA の使用を無効にしますか?
Redis サーバーを停止して再起動すると、Redis 経由で何かを送信すると、次のエラーがスローされます: "StackExchange.Redis.RedisServerException: NOSCRIPT No matching script.Please use EVAL."
私の理解では、このエラーは、サーバーが SHA1 ダイジェストを含むスクリプトを記憶していない場合に発生します。サーバーが再起動時にキャッシュされたスクリプトを削除すると推測しています - これはどのように処理する必要がありますか?
performance - CPU が 100% のときに Redis のパフォーマンスを向上させる方法は? シャーディング?最速の .Net クライアント?
Web サイトの負荷が大幅に増加したため、redis サーバー インスタンスが (8 つのコアのうちの 1 つで) 100% の CPU に達し、タイムアウトが発生したため、redis は現在ピーク負荷に苦しんでいます。
クライアント ソフトウェアを ServiceStack V3 (BookSleeve 1.1.0.4 から) に更新し、redis サーバーを 2.8.11 (2.4.x から) にアップグレードしました。ServiceStack.Redis を使用するHarbour.RedisSessionStateStoreが存在するため、ServiceStack を選択しました。以前は BookSleeve と一緒に AngieList.Redis を使用していましたが、それでも 100% を経験しました。
マスター/スレーブ ツリーとして構成された 8 つの redis サーバーがあります。セッション状態のための1つのサーバー。その他はデータキャッシュ用です。それぞれ 2 つのスレーブに接続された 2 つのマスター/スレーブを持つ 1 つのマスター。
サーバーは、100% の CPU で詰まり始めるピーク時に約 600 のクライアント接続を保持します。
パフォーマンスを向上させるために何ができるでしょうか?
シャーディングおよび/または StackExchange Redis クライアント (私の知る限り、利用できるセッション状態クライアントはありません...)。
それとも他の何かでしょうか?セッション サーバーも 100% に達し、他のサーバーには接続されていません (データとネットワークのスループットが低い)。
更新 1: redis-cli INFO の分析
Redis 2.8 を一晩実行した後の INFO コマンドの出力を次に示します。
更新 2: temproxy (シャーディング)
temproxyという興味深いコンポーネントを発見しました。このコンポーネントは、私が理解しているように、複数の redis インスタンスにまたがってシャードすることができます。
これは CPU の負担を軽減するのに役立ちますか?
プログラミング時間は大幅に節約できますが、各サーバーに 3 つの追加インスタンスを構成するには、まだ多少の労力が必要です。ですから、作業を開始する前に、誰かがこの解決策を確認または暴言を吐いてくれることを願っています.
azure - StackExchange.Redis キャッシュからすべて/1 つの項目を削除/削除します
Azure Redis Cache Service で StackExchange.Redis クライアントを使用しています。これが私のクラスです。
更新: マークの助けを借りて、これが私の最終クラスです
現在、redis キャッシュからすべてのアイテムまたは単一のアイテムを削除する方法がわかりません。
asp.net-mvc - OAuth 2 Owin が動作しない StackExchange.Redis SessionState
新しいMVC5プロジェクトから始めて、外部OAuthログインをGoogle、Facebook Twitter、Microsoftなどに接続しました。すべてが期待どおりに機能しています。
次に、Redis プレビュー リリース用の新しい ASP.NET セッション状態プロバイダーを追加し、動作させました。うん!
OAuth プロバイダーを使用してログインしようとすると、正しく機能しなくなっていることにすぐに気付きました。Google と Facebook のログイン ボタンは、Accont コントローラーで ExternalLoginCallback(string returnUrl) を呼び出しますが、どこにも行きません。ログインページが更新されるだけです。
LinkedIn、Twitter、および Microsoft のボタンはすべてユーザーをこれらのログイン ページに誘導しますが、アプリケーションに戻るとログイン ページに戻り、ユーザーはシステムに追加されません。
web.config のカスタム sessionState エントリをコメント アウトすると、外部ログインが通常に戻ります。
両方のフレームワークがブラックボックスであることを考えると、これら 2 つを一緒にプレイする方法がわかりません。
redis - key.Exists は期限切れのキーに対して true を返します
一般的なことを見逃している可能性があります。申し訳ありません。しかし、私のテストでは、期限切れのキー (ハッシュ) の存在を確認すると、true が返されます。
ここで「キャッシュ」は IDatabase インスタンスです
また、When.NotExists で設定すると機能します。
アップデート:
@Marc_Gravell の回答は、テストで問題を見つけるのに役立ちました: 有効期限を短すぎる (~500 ミリ秒) に設定すると、この奇妙な動作が発生します。1秒または2秒に変更したとき、私のテストは今合格しています。
変更されたMarc の例では、これも発生します (有効期限を 400 ミリ秒に変更しました)。
// cache.HashSet(key, "full", "some value"); // cache.KeyExpire(key, TimeSpan.FromSeconds(3));
もたらす
更新 2:
このコードは昨日はうまくいきましたが、今はうまくいきません。
ライン
戻り値
秒を使用するように変更しても解決しませんでした:
同じ結果を返します ( Assert.IsFalse(exists, "期限切れのキーが存在します"))