请教一个关于xmemcached的问题

liyong705 2011-03-07
用xmemcached 来操作 新浪的memcachdb

1. 先写入100个测试数据
XMemcachedClient client = new XMemcachedClient();
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
client.setOpTimeout(5000L); //设置超时
String key = "";
for (int i = 0; i < 100; i++) {
           key = String.valueOf(i);
           client.set(key, 0, "value" + key);
}
System.out.println("ok");

2. 读取数据
XMemcachedClient client = new XMemcachedClient();
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
client.setOpTimeout(5000L); //设置超时
String key = "";
for (int i = 0; i < 100; i++) {
           key = String.valueOf(i);
            System.out.println(client.get(key));
}
System.out.println("ok");
这样是没有问题的
如果把:
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
换成
client.addServer("192.168.0.236", 3333);
client.addServer("192.168.0.237", 3333);
也就是把顺序换1下,则就读不出来了,全部为空,请教?
dennis_zane 2011-03-07
liyong705 写道
用xmemcached 来操作 新浪的memcachdb

1. 先写入100个测试数据
XMemcachedClient client = new XMemcachedClient();
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
client.setOpTimeout(5000L); //设置超时
String key = "";
for (int i = 0; i < 100; i++) {
           key = String.valueOf(i);
           client.set(key, 0, "value" + key);
}
System.out.println("ok");

2. 读取数据
XMemcachedClient client = new XMemcachedClient();
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
client.setOpTimeout(5000L); //设置超时
String key = "";
for (int i = 0; i < 100; i++) {
           key = String.valueOf(i);
            System.out.println(client.get(key));
}
System.out.println("ok");
这样是没有问题的
如果把:
client.addServer("192.168.0.237", 3333);
client.addServer("192.168.0.236", 3333);
换成
client.addServer("192.168.0.236", 3333);
client.addServer("192.168.0.237", 3333);
也就是把顺序换1下,则就读不出来了,全部为空,请教?


读的时候换顺序?那肯定会造成这个后果,默认是采用余数哈希的散列分布,假设"1"原来存储在"192.168.0.237",你换一个顺序,它读的时候却去"192.168.0.236"上找,肯定找不到,你这里就两个服务器,读的时候调个顺序,都找不到了。

另外,memcachedb直到1.0这个版本才支持multi get,如果是之前的版本,在使用memcachedb要关闭multi get优化:
memcachedClient.setOptimizeGet(false);
Global site tag (gtag.js) - Google Analytics