我有一个运行我的 C# 应用程序的 Windows Azure 服务器。它分布在 4 个中型实例上,我使用 Redis 进行 L2 缓存。该应用程序正在处理相当可观的流量(每天大约 300,000 次浏览量)。我正在使用 BookSleeve 进行 redis 连接,在应用程序启动并运行后,它将开始从 BookSleeve 抛出 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 连接的代码
我尝试更改 Redis 服务器的超时以说明 Azure 负载均衡器,但没有成功。我已经尝试过设置超时 30 和设置超时 0,如下所述:Redis connection errors when using Booksleeve Redis client in Azure VM
任何帮助将不胜感激。