Redis无法在繁忙的负载中连接

时间:2013-06-20 12:39:36

标签: redis servicestack

我收到此错误。有什么工作?

无法连接到redis实例127.0.0.1:6379>>堆栈跟踪 :     ServiceStack.Redis.RedisNativeClient.RedisNativeClient.RedisNativeClient上的ServiceStack.Redis.RedisNativeClient.Connect()        ServiceStack.Redis.RedisNative的ServiceStack.Redis.RedisNativeClient.SendCommand(Byte [] [] cmdWithBinaryArgs)        ServiceStack.Redis.RedisClientList.GetEnumerator()a中的Client.SendExpectLong(Byte [] [] cmdWithBinaryArgs)        t Common.Tools.RedisDBHelper.checkListInt(String myKey,Int32 id)>>内部异常:消息:没有连接        ld是因为目标机器主动拒绝它127.0.0.1:6379 >>内部异常:stacktrace:在S        System.Net.Sockets.Socket.Connect(Stri)中的ystem.Net.Sockets.Socket.Connect(IPAddress []地址,Int32端口)        ServiceStack.Redis.RedisNativeClient.Connect()上的ng host,Int32 port)CurrentStack:在System.Environment。        Common.Tools.E上System.Environment.get_StackTrace()的GetStackTrace(异常e,布尔needFileInfo)        Common.Tools.RedisDBHelper.checkListInt(String中的xtensionHelper.saveAsDebug(Exception myEx,String aciklama)         myKey,Int32 id)

3 个答案:

答案 0 :(得分:1)

我认为可能是Redis忙碌了。然后我认为这是ServiceStack。但最终,Windows中的TCP发布速度不够快。在条目的值到期之前,TCP不会释放已关闭的连接。我将TcpTimeWaitDelay设置为45秒。 http://technet.microsoft.com/en-us/library/cc938217.aspx并设置MaxUserPort http://mashijie.blogspot.com/2009/05/change-default-setting-of-tcp-ports.html

将端口范围调整为1025-64511

确保重新启动Windows

另请参阅:Redis connection/buffer-size limit exceeded

答案 1 :(得分:0)

当RedisClient无法创建TCP连接时会发生这种情况。抛出异常就是这里的正确行为。

答案 2 :(得分:0)

我自己有这个问题。 你使用Redis的二进制文件(从什么来源,GitHub,非官方版本?)

我找到的原因是: 这实际上是Redis的说法,它无法创建连接。 (因为提供的痕迹也解释了) 应该是一个更明确的例外,它解释说这是来自Redis,而不是防火墙或任何恕我直言。

我的猜测是你在x64架构上运行32位构建的二进制文件。

如果您从链接下载版本:MsOpenTech Group 并使用MS C编译器(如免费的VS 2012 Express)构建它,您应该能够运行生成的二进制文件而不会出现此问题。

不能做出任何承诺,但这对我有用。

编辑:另外,请确保启动redis-server(以管理员身份)并在防火墙中提供必要的权限,否则您将无法使用服务器连接redis-cli客户端!