我认为Spymemcached会尝试在连接丢失时重新建立到服务器的连接。
但是我看到了一些不同的东西,我想知道我误解了什么,或者我做错了什么。下面是一些示例代码:
MemcachedClient c=new MemcachedClient(AddrUtil.getAddresses("server:11211"));
while(true)
try {
System.out.println(c.get("hatsts"));
Thread.sleep(10000);
} catch(Exception e) {
e.printStackTrace();
}
它最初运行时没有问题。然后我拔掉网络插头。随后,客户端检测到网络故障并抛出以下异常:
net.spy.memcached.OperationTimeoutException: Timeout waiting for value
但是,当我重新建立网络时,即使在5分钟之后,客户端也不会恢复并继续抛出异常。我尝试了SpyMemcached 2.10.6和2.9.0。
我遗漏了什么?
发布于 2014-03-12 06:23:52
这里的问题是,由于您拉动了网络电缆,客户端上的tcp套接字仍然认为连接是有效的。不同操作系统的tcp保持存活时间不同,最高可达30分钟。因此,应用程序(在本例中是Spymemcached)没有被tcp层通知连接不再有效,因此Spymemcached不尝试重新连接。
Spymemcached检测这种情况的方法是计算连续操作超时的数量。我最后一次检查默认值是99。一旦这许多操作超时,Spymemcached将重新连接。如果要将此值设置为其他值,则可以在ConnectionFactory中更改该值。有一个名为getContinuousTimeout()的函数,它是Spymemcached默认获取99的地方。您可以使用ConnectionFactory构建自己的ConnectionFactoryBuilder。
希望这是足够的信息来回答你的问题,让你朝着正确的方向前进。如果不让我知道,我可以补充一些更多的细节。
https://stackoverflow.com/questions/22332203
复制相似问题