`
doccent
  • 浏览: 18565 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

MemcachedClient4Java

    博客分类:
  • Java
阅读更多

  项目中用到了cenwenchu的MemcachedClient4Java ,版本号是2.5.1版。

  在使用的过程中发现如果memcached服务器重启,客户端会访问失败并抛出"no socket to availble"的异常,失败几次之后又可以正常访问了。

  原因是服务器重启的时候,客户端连接池里原有的socket连接失效了,因此使用的时候才抛出异常,抛出异常之后失效的socket被销毁,建立一个新的连接,以后再用的时候就又可以正常访问了。

  客户端建立新的socket连接时,如果发现服务器连接不上,会把当前连接池里该服务器的连接都销毁掉。

  它的与连接相关的代码主要是SockIOPool,里面有一个维护线程。维护线程实现的功能比较简单,主要是查看连接池里的可用连接数,如果数量小于配置的最小连接数就创建新连接,如果大于最大连接数就销毁空闲的连接,另外还要从连接池里移出死连接。

我修改了它获取连接时异常处理的代码,如果使用前检查发现连接不可用就直接销毁这个连接,然后建立一个新的连接。这样就可以在服务器重启之后立即正常访问而不需要再等失败几次之后才可以。

注意要在配置文件里开启它的连接池维护线程已经检查连接可用性的功能。

分享到:
评论
2 楼 doccent 2010-09-10  
tedeyang 写道
如果建立新连接时memcached服务器还没启动完成怎么办?你是throw还是return null

是调用它的createSocket方法创建的,它返回null了
1 楼 tedeyang 2010-09-07  
如果建立新连接时memcached服务器还没启动完成怎么办?你是throw还是return null

相关推荐

Global site tag (gtag.js) - Google Analytics