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

时间:2016-04-14 19:49:40

标签: java spymemcached

我正在使用以下库: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是否已连接?

1 个答案:

答案 0 :(得分:1)

您可以通过访问active的{​​{1}}对象,直接检查节点是否处于活动状态,而不是解析MemcachedNode变量。您可以按如下所示实现它:

MemcachedClient

您可以for (MemcachedNode node : mc.getNodeLocator().getAll()) { if (!node.isActive()) { System.out.println("Failed to connect to Memcached server"); mc.shutdown(); //Handle accordingly } } 使用mc.shutdown()继续重新连接到服务器,导致程序挂起。