平台: 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);
}
}
答案 0 :(得分:1)
构造函数MemcachedClient(List,String,String)将连接到列表中的第一个URI,以获取有关整个集群的信息。这意味着如果您的群集中有10台服务器,则可以指定一个IP地址来连接所有服务器。允许URI列表的原因是,如果您从中获取群集信息的服务器出现故障,您可以尝试从群集中的其他服务器获取群集信息。
在这种情况下,Spymemcached使用的散列算法由群集配置开始时的Membase确定。如果你查看在配置阶段发送给Spymemcached的一些json,你会看到哈希算法是CRC。查看DefaultHashAlgorithm类以获取有关CRC的更多信息。
另外,我很好奇为什么你使用Membase如上所述。