用于多个membase服务器的Spymemcached哈希算法

时间:2012-01-18 10:22:13

标签: spymemcached

平台: 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);
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

另外,我很好奇为什么你使用Membase如上所述。