spymemcached:如何判断memcached是否已成功连接



我正在使用以下库: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 }

我以为它只会返回一个SUCCESSFAILURE,但它返回了一个字符串。

该方法的文档如下: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是否已连接?

您可以通过访问MemcachedClientMemcachedNode对象来直接检查节点是否处于活动状态,而不是解析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()

最新更新