【发布时间】:2020-07-03 18:29:32
【问题描述】:
我正在努力弄清楚来自 Stack Exchange Redis 客户端的错误消息告诉我什么:
未处理的异常:System.AggregateException:一个或多个错误 发生了。 (等待响应超时(出站=0KiB,入站=0KiB, 经过 32516 毫秒,超时为 30000 毫秒),inst:0,qu:0,qs:1,in:0, serverEndpoint:未指定/XXX:6379,管理人员:9 10 个可用,客户端名称:YYY,IOCP: (忙=0,空闲=1000,最小=2,最大=1000),工人: (忙=1025,空闲=31742,最小=1024,最大=32767),v:2.0.571.20511(请 查看这篇文章,了解一些常见的客户端问题 可能导致超时: https://stackexchange.github.io/StackExchange.Redis/Timeouts)) ---> 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 (请查看这篇文章了解一些常见的客户端问题 这可能导致超时: https://stackexchange.github.io/StackExchange.Redis/Timeouts
我正在使用此代码选择负载最少的连接多路复用器并退出,但在触发大量字符串设置命令时我仍然会超时。
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);
}
}
}
【问题讨论】:
-
这方面有什么进展吗?