我有一个spymemcached客户端,它对一组主机运行操作。我注意到在get操作中,你可以这样做:
Future<Object> result = client.asyncGet(key);
Object data = result.get(timeoutmillis, TimeUnit.MILLISECONDS);
与此不同的是什么?
ConnectionFactoryBuilder cfb = new ConnectionFactoryBuilder();
cfb.setOpTimeout(timeoutmillis);
答案 0 :(得分:2)
我看到这个问题很久以前就被问过了......但是如果有人需要答案的话还是这样:
ConnectionFactoryBuilder只是ConnectionFactory的构建器。 ConnectionFactory用于设置memcached客户端,opTimeout只是我们可以通过此构建器设置的参数之一:
cfb.setOpTimeout(timeoutmillis);
此timeoutmillis
将被转移到客户端,并在Futures上用作超时,在客户端内包装memcached异步操作。如您所见,您可以在memcached客户端上使用一对异步和同步版本的方法(例如asyncGet
和get
)。虽然asyncGet
返回一个未来的对象,我们可以使用我们自己的异步代码超时,get
消除它并在客户端内完成所有未来的机制,并使用opTimeout作为超时来从内部获取结果未来的对象没有暴露给我们。
因此cfb.setOpTimeout(timeoutmillis)
的用法只是将处理所有异步工作委托给客户端,并在我们使用get
,getBulk
等简单方法时简化代码库。