StackExchange.Redisノート-パフォーマンスのチューニング
2049 ワード
タイムアウトの問題は、(StackExchange.Redis.RedisTimeoutException)スレッドプールの表示を増やす:ThreadPool.SetMinThreads(100, 100); GetDatabase行の前にコードを追加:connection.PreserveAsyncOrder = false;
各プロパティは、現在のredis接続の完了するコマンドが現在存在する状態を表します. PendingUnsentItemsは、送信待ちキューがまだ送信されていないコマンドが実行されていることを示す. SentItemsAwaitingResponseは、送信されたが応答結果を受信していないコマンドを示します. R e s p o n s e s A waitingAsyncCompletionは、応答するコマンドが受信されたが、TaskCompletionSource()が呼び出されていないことを示す.TrySetResult()のコマンドです.
PendingUnsenntItemsとSentItems AwaitingResponseが大きすぎる原因は、基本的にネットワークがブロックされているためです.ネットワーク帯域幅やredisのvalueが大きいかどうかを確認する必要があります.ResponsesAwaitingAsyncCompletionは、上記の例のコードのようにawait以降のコードのため、スレッドが長い同期時間を費やし、コードの最適化とPreserveAsyncOrderをfalseに設定する必要がある.
参照ドキュメント(https://stackexchange.github.io/StackExchange.Redis/Profiling)
参照先:https://blog.csdn.net/px01ih8/article/details/81278724
次にStackExchangeについて説明します。Redisの2つの神器ConnectionCountersとIProfiler
1、ConnectionCounters:connection.GetCounters().Interactiveが取得したオブジェクトの後に3つのプロパティが便利です
public class ConnectionCounters
{
///
/// Operations that have been requested, but which have not yet been sent to the server
///
public int PendingUnsentItems { get; }
///
/// Operations that have been sent to the server, but which are awaiting a response
///
public int SentItemsAwaitingResponse { get; }
///
/// Operations for which the response has been processed, but which are awaiting asynchronous completion
///
public int ResponsesAwaitingAsyncCompletion { get; }
}
各プロパティは、現在のredis接続の完了するコマンドが現在存在する状態を表します.
PendingUnsenntItemsとSentItems AwaitingResponseが大きすぎる原因は、基本的にネットワークがブロックされているためです.ネットワーク帯域幅やredisのvalueが大きいかどうかを確認する必要があります.ResponsesAwaitingAsyncCompletionは、上記の例のコードのようにawait以降のコードのため、スレッドが長い同期時間を費やし、コードの最適化とPreserveAsyncOrderをfalseに設定する必要がある.
2、ConnectionCountersはスレッドの瞬時状態を分析していますが、IProfilerはリクエストが全部でどれだけのredisコマンドを実行したか、それぞれどのくらい使用したかを追跡することができます。具体的な詳細はコード体験を書いてください。
参照ドキュメント(https://stackexchange.github.io/StackExchange.Redis/Profiling)
参照先:https://blog.csdn.net/px01ih8/article/details/81278724