0

平台: spymemcached-2.7.3.jar,64 位 Windows 7 操作系统

我们有两个 membase 服务器(非集群环境),我们使用 spymemcached java 客户端来设置和从 memcache 获取数据。我们没有在两个 membase 服务器之间使用任何复制。

我们正在使用以下代码在 memcache 中设置数据。看起来 MemcachedClient 总是首先尝试在 server1 中放置/获取数据(如果可用)。如果 server1 已关闭,则 MemcachedClient 从 server2 放置/获取。spymemcached 是否使用任何散列算法来决定它需要从哪个服务器设置/获取数据?任何可用的文档解释它是如何工作的?

代码

public class Main {

    public static void main(String[] args) throws IOException, URISyntaxException {

        MemcachedClient client;

        URI server1 = new URI("http://192.168.100.111:8091/pools");
        URI server2 = new URI("http://127.0.0.1:8091/pools");
        ArrayList<URI> serverList = new ArrayList<URI>();
        serverList.add(server1);
        serverList.add(server2);
        client = new MemcachedClient(serverList, "default", "");

        client.set("spoon", 50, "Hello World!");
        client.shutdown(10, TimeUnit.SECONDS);

        System.exit(0);
    }
}
4

1 回答 1

1

构造函数 MemcachedClient(List, String, String) 将连接到列表中的第一个 URI 以获取有关整个集群的信息。这意味着如果您的集群中有 10 台服务器,您可以指定一个 IP 地址来连接所有服务器。允许使用 URI 列表的原因是,如果您从中获取集群信息的服务器出现故障,您可以尝试从集群中的另一台服务器获取集群信息。

在这种情况下 Spymemcached 使用的哈希算法由 Membase 在集群配置开始时确定。如果您查看在配置阶段发送到 Spymemcached 的一些 json,您会看到哈希算法是 CRC。查看 DefaultHashAlgorithm 类以获取有关 CRC 的更多信息。

另外,我很好奇您为什么按照描述使用 Membase。

于 2012-01-18T18:26:48.733 回答