我有一个针对一组主机运行操作的 spymemcached 客户端。我注意到在 get 操作中,你可以这样做:
Future<Object> result = client.asyncGet(key);
Object data = result.get(timeoutmillis, TimeUnit.MILLISECONDS);
这样做有什么不同?
ConnectionFactoryBuilder cfb = new ConnectionFactoryBuilder();
cfb.setOpTimeout(timeoutmillis);
最佳答案
我看到很久以前就有人问过这个问题......但是如果有人需要答案的话:
ConnectionFactoryBuilder 只是 ConnectionFactory 的构建器。 ConnectionFactory 用于设置 memcached 客户端,而 opTimeout 只是我们可以通过此构建器设置的参数之一:
cfb.setOpTimeout(timeoutmillis);
此 timeoutmillis
将被传输到客户端并用作 Futures 的超时,将 memcached 异步操作包装在客户端内。如您所见,可以在 memcached 客户端上使用成对的异步和同步版本的方法(例如 asyncGet
和 get
)。虽然 asyncGet
返回一个 future 对象,我们可以使用我们自己的异步代码超时,get
消除它并在客户端内完成所有 future 机制并使用 opTimeout 作为超时来从未向我们公开的内部 future 对象获取结果。
所以使用 cfb.setOpTimeout(timeoutmillis)
只是将处理所有异步工作委托(delegate)给客户端,并在我们使用像 get
这样的简单方法时简化了我们的代码库,getBulk
等
关于java - Spymemcached,操作和连接工厂中的超时差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168527/