堆栈交换Redis客户端超时

堆栈交换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),工作

我正在努力弄清楚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 (请阅读本文,了解一些常见的客户端问题 这可能导致超时:

我使用这段代码选择负载最少的连接多路复用器并退出,但在触发大量字符串集命令时仍会超时

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)

看看这里,但是要注意文章中提到的其他服务器性能后果(取决于您的用例)。

有进展吗?有进展吗?