gpt4 book ai didi

java - Spymemcached 和连接失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:00 27 4
gpt4 key购买 nike

虽然 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。

我错过了什么?

最佳答案

这里的问题是,因为你拔了网线,你客户端上的 tcp 套接字仍然认为连接是有效的。 tcp keepalive 因操作系统而异,最长可达 30 分钟。因此,应用程序(在本例中为 Spymemcached)未收到 tcp 层连接不再有效的通知,因此 Spymemcached 不会尝试重新连接。

Spymemcached 检测这种情况的方法是通过计算连续操作超时的数量。我最后一次检查默认值是 99。一旦这么多操作超时,Spymemcached 将重新连接。如果要将它设置为其他值,可以在 ConnectionFactory 中更改该值。有一个名为 getContinuousTimeout() 的函数,这是 Spymemcached 默认从中获取 99 的地方。您可以使用 ConnectionFactoryBuilder 构建自己的 ConnectionFactory。

希望这些信息足以回答您的问题并让您朝着正确的方向前进。如果没有,请告诉我,我可以添加更多详细信息。

关于java - Spymemcached 和连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com