在gen_server中引发了Redis异常

时间:2013-07-12 02:16:36

标签: erlang redis

我正在尝试使用gen_server从erlang中插入redis中的10000条记录。但是,我得到以下异常

exception exit: {connection_error,{connection_error,eaddrnotavail}}

注意: -

  • redis服务器上的端口范围就足够了
  • Redis配置为一次接受10000个连接
  • 我也尝试过使用timer:sleep来排除连接充满的可能性。
  • 我正在开始连接,立即触发查询和关闭连接
  • 从gen_server到redis的调用是同步的
  • 我使用eredis作为库
  • 我在redis中发现此错误大约200到500次插入

2 个答案:

答案 0 :(得分:2)

有它工作:)发布答案,以便它可以帮助其他人......

问题是内核TIME_WAIT。

Eredis正在使用gen_tcp,因为我在快速网络中并生成10000个连接许多连接处于TIME_WAIT状态,而eredis正在使用resuse addr为true所以虽然我在我的代码OS中关闭了连接但是端口是在TIME_WAIT状态,erlang再次尝试连接到该端口。

答案 1 :(得分:1)

感谢发布。 也发布了一些我的更改。

更改eredis.hrl

-define(SOCKET_OPTS,[binary,{active,once},{packet,raw},{reuseaddr,true}])。

-define(SOCKET_OPTS,[binary,{active,once},{packet,raw},{reuseaddr,false}])。