问题描述:
MemcachedClientBuilder builder;
MemcachedClient memcachedClient;
builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
builder.setFailureMode(true);
builder.setConnectionPoolSize(32);
try {
String a = "123";
memcachedClient = builder.build();
memcachedClient.setWithNoReply("123", 3600, "aaa");
logger.error("value:" + memcachedClient.get("123", 10000L).toString());
}catch (Exception e){
logger.error(e.getMessage());
}
以上代码可以取出缓存并输出,但如果有A,B两个工程,里面都是这段代码,A工程启动后正常,B工程启动后,A,B都阻塞无法存取,此时memcached服务重启才能恢复。同一个工程里buid两个client也导致同样的问题。
解决方案:
把builder.setConnectionPoolSize(32);去掉或设小一些即可buid多个client。
问题猜想:
因为XMemcachedClientBuilder里是用连接池拿实例的,可能设置最大连接数后,两个工程相加的总连接数超出了memcached的最大连接数,但是用同一个builder也无法buid两个client,这种猜想好象不对。
希望对次比较熟悉的同学能解答一下,谢谢