C# 大量请求时StackExchange.Redis超时
我有一个使用StackExchange.Redis的分布式Web服务(WCF),每天大约有500万个请求 我多次遇到此错误(有时值可能不同): System.TimeoutException:执行SISSember KeyAllUsersFlag的超时,指令:7,队列:6,qu:0,qs:6,qc:0,wr:0,wq:0,in:20,ar:0,客户端名称:服务器,IOCP:(忙=20,空闲=3180,最小=2400,最大=3200),工作线程:(忙=7,空闲=793,最小=400,最大=800),本地CPU:不可用 在webconfig上,我有: httpRuntime targetFramework=“4.6.1”minFreeThreads=“704”minLocalRequestFreeThreads=“608” 在机器配置上,我有: processModel maxWorkerThreads=“100”maxIoThreads=“400”minWorkerThreads=“50”minIoThreads=“300” 关于多路复用器的配置,我有:C# 大量请求时StackExchange.Redis超时,c#,wcf,redis,stackexchange.redis,C#,Wcf,Redis,Stackexchange.redis,我有一个使用StackExchange.Redis的分布式Web服务(WCF),每天大约有500万个请求 我多次遇到此错误(有时值可能不同): System.TimeoutException:执行SISSember KeyAllUsersFlag的超时,指令:7,队列:6,qu:0,qs:6,qc:0,wr:0,wq:0,in:20,ar:0,客户端名称:服务器,IOCP:(忙=20,空闲=3180,最小=2400,最大=3200),工作线程:(忙=7,空闲=793,最小=400,最大=800)
var configurationOptions = new ConfigurationOptions
{
AbortOnConnectFail = false,
SyncTimeout = 2000,
};
我能做些什么来优化对redis的调用,以获得快速响应而不出现此错误?您可能会遇到与redis服务器建立连接的问题。正在通过TCP端口建立连接。单个源IP可以与单个目标IP和端口进行的最大TCP会话数为65535。这假设源IP中16位源端口范围(不包括0)中的每个可用源端口都已被利用。实际上,大多数操作系统仅从端口32768(0-65535范围后半部分中的最低数量)开始创建emphemeral源端口(客户端使用的端口类型),这意味着您最多可以与单个目标IP和侦听端口建立32768个连接。显然,其他资源限制可能会阻止这一点,但这是理论上的最大值。 长话短说-请确保在工作人员完成工作后关闭连接(SISMEMBER命令)。错误消息表示您有可用的工作人员,但他们无法建立到redis服务器的连接,并且由于客户端超时而失败。 请检查连接数,如果可用连接数不足,请在与redis的连接中使用keepAlive选项。您还可以使用connectTimeout选项设置连接操作的超时(毫秒),使用connectRetry设置初始连接命令期间重复连接尝试的次数。