C#アプリケーションを実行しているWindowsAzureServerがあります。これは4つのメディアインスタンスで配布され、L2キャッシングにRedisを使用しています。このアプリケーションは、かなりの量のトラフィック(1日あたり約300,000ページビュー)を処理しています。私はRedis接続にBookSleeveを使用していますが、アプリケーションが起動して実行されると、BookSleeveから1分間に約4回SocketExceptionsがスローされ始めます。正確な例外は次のとおりです。
Exception type: System.Net.Sockets.SocketException
Exception message: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
サーバーから何かを読んでいるときにのみ発生しているようです。
using (var connection = ConnectionGateway.GetReadConnection())
{
var task = connection.Hashes.GetString(App.RedisDatabase, CacheKeys.My_KEY);
var result = connection.Wait(task);
}
私のGetReadConnectionは次のように設定されています。
public static RedisConnection GetReadConnection()
{
RedisConnection conn = getNewConnection();
try
{
var openAsync = conn.Open();
conn.Wait(openAsync);
return conn;
}
catch (SocketException ex)
{
throw new Exception(RedisConnectionFailed, ex);
}
}
これで、作成者が説明するように、すべての書き込みが単一の接続を共有するため、これは、connection.Wait()の使用を必要とする読み取りでのみ発生します。それはすべてうまくいくようです。書き込みには、BookSleeveを使用して開いているRedis接続を維持するのと同様のコードを使用します
Azureロードバランサーを考慮してRedisサーバーのタイムアウトを変更しようとしましたが、成功しませんでした。ここで説明するように、タイムアウト30の設定とタイムアウト0の設定の両方を試しました:AzureVMでBooksleeveRedisクライアントを使用する場合のRedis接続エラー
どんな助けでも本当にありがたいです。