

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Memcached 客户端库中添加 Auto Discovery
<a name="AutoDiscovery.AddingToYourClientLibrary"></a>

自动发现功能的配置信息以冗方式存储在每个 Memcached 集群节点中。客户端应用程序可以查询任何缓存节点并获取集群中所有节点的配置信息。

应用程序完成此操作采用的方式取决于缓存引擎版本：
+ 如果缓存引擎版本为 **1.4.14 或更高版本**，请使用 `config` 命令。
+ 如果缓存引擎版本 **低于 1.4.14**，请使用 `get AmazonElastiCache:cluster` 命令。

这两个命令得到的输出结果是相同的，并且在下面的 [输出格式](#AutoDiscovery.AddingToYourClientLibrary.OutputFormat) 部分中加以描述。

## 缓存引擎版本 1.4.14 或更高版本
<a name="AutoDiscovery.AddingToYourClientLibrary.1-4-14-plus"></a>

对于缓存引擎版本 1.4.14 或更高版本，请使用 `config` 命令。此命令已由群集客户端添加到 Memcached ASCII 和二进制协议中 ElastiCache，并在 ElastiCache 群集客户端中实现。如果您想将 Auto Discovery 与其他客户端库一同使用，那么将需要对此库进行扩展，以支持 `config` 命令。

**注意**  
下面的文档与 ASCII 协议有关；然而，`config` 命令支持 ASCII 和库。如果要使用二进制协议添加自动发现支持，请参阅[ ElastiCache 群集客户端的源代码](https://github.com/amazonwebservices/aws-elasticache-cluster-client-memcached-for-java/tree/master/src/main/java/net/spy/memcached/protocol/binary)。

**语法**

`config [sub-command] [key]`

### 选项
<a name="AutoDiscovery.AddingToYourClientLibrary.1-4-14-plus.Options"></a>


| Name | 说明 | 必填 | 
| --- | --- | --- | 
| sub-command |  用于与缓存节点互动的子命令。对于 Auto Discovery，这个子命令为 `get`。  | 是 | 
| key |  存储集群配置的密钥。对于 Auto Discovery，这个密钥的名称为 `cluster`。  | 是 | 

如要获取集群配置信息，请使用下述命令：

```
config get cluster
```

## 缓存引擎版本 1.4.14 或更低版本
<a name="AutoDiscovery.AddingToYourClientLibrary.pre-1-4-14"></a>

如要获取集群配置信息，请使用下述命令：

```
get AmazonElastiCache:cluster
```

**注意**  
请勿篡改 “: clusterAmazonElastiCache” 密钥，因为这是集群配置信息所在的地方。如果您确实覆盖了此密钥，则在 ElastiCache 自动正确更新配置信息之前，客户端可能会在短时间内（不超过 15 秒）内被错误配置。

## 输出格式
<a name="AutoDiscovery.AddingToYourClientLibrary.OutputFormat"></a>

无论您使用 `config get cluster` 或 `get AmazonElastiCache:cluster`，回复都由两行组成：
+ 配置信息的版本号。每当在集群中添加一个节点或者从集群中移除一个节点时，版本号都会增加一个数。
+ 一份缓存节点列表。列表中的各个节点都由 *用户名\$1IP 地址\$1端口* 组加以表示，并且每个节点都由一个空格加以限定。

回车和换行字符 (CR \$1 LF) 出现在每行末尾处。数据行末尾包含一个换行字符 (LF)，其中添加了 CR \$1 LF。配置版本行以 LF 终止，无需 CR。

包含三个节点的集群的表示方式如下：

```
configversion\n
hostname|ip-address|port hostname|ip-address|port hostname|ip-address|port\n\r\n
```

每个节点都会用 CNAME 和私有 IP 地址显示。CNAME 将会始终加以显示；如果私有 IP 地址不可用，则不会显示；然而，管道字符“`|`”仍会被印出。

**Example**  
下面介绍了一个示例，即当您询问配置信息时返回的有效负载：  

```
CONFIG cluster 0 136\r\n
12\n
myCluster.pc4ldq.0001.use1.cache.amazonaws.com|10.82.235.120|11211 myCluster.pc4ldq.0002.use1.cache.amazonaws.com|10.80.249.27|11211\n\r\n 
END\r\n
```

**注意**  
第二行表示迄今为止已修改配置信息 12 次。
在第三行中，节点列表按照主机名的字母顺序进行排序。这种排序可能与您目前在客户端应用程序中采用的顺序不同。