堆栈交换Redis客户端超时
我正在努力弄清楚Stack Exchange Redis客户端的错误消息告诉我什么: 未处理的异常:System.AggregateException:一个或多个错误 发生。(等待响应超时(出站=0KiB,入站=0KiB, 已过32516ms,超时为30000ms),指令:0,指令:0,指令:1,输入:0, serverEndpoint:Unspecified/XXX:6379,经理:9人,共9人 10可用,客户名称:YYY,IOCP: (忙=0,空闲=1000,最小=2,最大=1000),工作者: (忙=1025,闲=31742,最小=1024,最大=32767),v:2.0.571.20511(请 请阅读本文,了解一些常见的客户端问题 可能导致超时: )) ---> StackExchange.Redis.RedisTimeoutException:等待响应的超时 (出站=0KiB,入站=0KiB,经过32516ms,超时30000ms), inst:0、qu:0、qs:1、in:0、serverEndpoint: 未指定/XXX:6379,经理:10人中的9人可用, 客户名称:YYY,IOCP:(忙=0,闲=1000,最小=2,最大=1000), 工人:(忙=1025,空闲=31742,最小=1024,最大=32767),v:2.0.571.20511 (请阅读本文,了解一些常见的客户端问题 这可能导致超时: 我使用这段代码选择负载最少的连接多路复用器并退出,但在触发大量字符串集命令时仍会超时堆栈交换Redis客户端超时,redis,stackexchange.redis,Redis,Stackexchange.redis,我正在努力弄清楚Stack Exchange Redis客户端的错误消息告诉我什么: 未处理的异常:System.AggregateException:一个或多个错误 发生。(等待响应超时(出站=0KiB,入站=0KiB, 已过32516ms,超时为30000ms),指令:0,指令:0,指令:1,输入:0, serverEndpoint:Unspecified/XXX:6379,经理:9人,共9人 10可用,客户名称:YYY,IOCP: (忙=0,空闲=1000,最小=2,最大=1000),工作
public class RedisConnectionManager : IRedisConnectionManager
{
private const int MaxQueueLength = 10;
private readonly List<Lazy<ConnectionMultiplexer>> _connectionMultiplexers;
public RedisConnectionManager(List<Lazy<ConnectionMultiplexer>> connectionMultiplexers)
{
this._connectionMultiplexers = connectionMultiplexers;
}
public async Task<ConnectionMultiplexer> GetLeastBusyConnectionAsync()
{
var leastBusyConnection = this._connectionMultiplexers.OrderBy(connection => connection.Value.GetCounters().Interactive.TotalOutstanding).First();
await WaitUntilConnectionAvailableAsync(leastBusyConnection);
return this._connectionMultiplexers.OrderBy(connection => connection.Value.GetCounters().Interactive.TotalOutstanding).First().Value;
}
private static async Task WaitUntilConnectionAvailableAsync(Lazy<ConnectionMultiplexer> leastBusyConnection)
{
while (leastBusyConnection.Value.GetCounters().Interactive.TotalOutstanding > MaxQueueLength)
{
await Task.Delay(100);
}
}
}
公共类RedisConnectionManager:IRedisConnectionManager
{
private const int MaxQueueLength=10;
专用只读列表\u连接多路复用器;
公共重新连接管理器(列出连接多路复用器)
{
这是._connectionMultiplexers=connectionMultiplexers;
}
公共异步任务GetLeastBusyConnectionAsync()
{
var leastBusyConnection=this.\u connectionMultiplexers.OrderBy(connection=>connection.Value.GetCounters().Interactive.totalsuspending).First();
等待WaitUntlConnectionAvailableAsync(至少BusyConnection);
返回此值。_connectionMultiplexers.OrderBy(connection=>connection.Value.GetCounters().Interactive.totalUnderstanding).First().Value;
}
专用静态异步任务WaitUntlConnectionAvailableAsync(Lazy-leastBusyConnection)
{
while(leastBusyConnection.Value.GetCounters().Interactive.totalUnderstanding>MaxQueueLength)
{
等待任务。延迟(100);
}
}
}
关于这一点,上面有几个答案
在您的特定情况下,这看起来像是线程池抛出的问题,其中忙线程为1025个,比最小配置的1024个线程多
工作者:(忙=1025,空闲=31742,最小=1024,最大=32767)
看看这里,但是要注意文章中提到的其他服务器性能后果(取决于您的用例)。
关于这一点,有几个答案 在您的特定情况下,这看起来像是线程池抛出的问题,其中忙线程为1025个,比最小配置的1024个线程多 工作者:(忙=1025,空闲=31742,最小=1024,最大=32767) 看看这里,但是要注意文章中提到的其他服务器性能后果(取决于您的用例)。
有进展吗?有进展吗?