我正在使用以下库:compile 'net.spy:spymemcached:2.12.0'
因此,如果我这样做,如果memcachedclient没有成功连接,它会给我一个错误:
mc.get(myvariable)
我想在调用mc.get()
之前检查连接状态,以防止出现错误。
我想也许我可以检查一下:mc.getConnection().connectionsStatus()
,但它所做的只是返回一个字符串,上面写着:
Connection Status { pub-memcache-XXX active: false, authed: false, last read: 7 ms ago }
我以为它只会返回一个SUCCESS
或FAILURE
,但它返回了一个字符串。
该方法的文档如下:https://github.com/couchbase/spymemcached/blob/master/src/main/java/net/spy/memcached/MemcachedConnection.java
我已经复制了以下相关方法:
/**
* Construct a String containing information about all nodes and their state.
*
* @return a stringified representation of the connection status.
*/
public String connectionsStatus() {
StringBuilder connStatus = new StringBuilder();
connStatus.append("Connection Status {");
for (MemcachedNode node : locator.getAll()) {
connStatus
.append(" ")
.append(node.getSocketAddress())
.append(" active: ")
.append(node.isActive())
.append(", authed: ")
.append(node.isAuthenticated())
.append(MessageFormat.format(", last read: {0} ms ago",
node.lastReadDelta()));
}
connStatus.append(" }");
return connStatus.toString();
}
我不知道,我可以解析出active
变量并进行检查,但在调用get
之前,有没有更简单的方法来检查spymemcached是否已连接?
您可以通过访问MemcachedClient
的MemcachedNode
对象来直接检查节点是否处于活动状态,而不是解析active
变量。您可以实现如下所示:
for (MemcachedNode node : mc.getNodeLocator().getAll()) {
if (!node.isActive()) {
System.out.println("Failed to connect to Memcached server");
mc.shutdown();
//Handle accordingly
}
}
当MemcachedClient
继续重新连接到服务器导致程序挂起时,您可以使用mc.shutdown()
。