参考文档
http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html#id5
http://blog.csdn.net/myrainblues/article/details/25881535
集群的客户端命令为 redis-cli -c -p 7000 , 必须带 -c 否则认为是普通的redis客户端
普通命令测试如下
检查slave 和 master的关系 , slave 和 master 是主从关系,实时备份, 这是跟 codis 的一个很大的不同,codis 的 slave 和 master 数据不同步,属于主备关系
同样不支持 mget 这种批量处理类型的命令
所有的master 节点 相对于客户端而言是等价的,如下图
客户端 Jedis 的使用 ( Jedis 2.6.2 版本)
@Test
public void testRedis300() {
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("192.168.10.229", ));
//jedisClusterNodes.add(new HostAndPort("192.168.10.229", 7002));
//jedisClusterNodes.add(new HostAndPort("192.168.10.229", 7003));
JedisCluster jc = new JedisCluster( jedisClusterNodes );
String t1 = jc.get("t_1");
System.out.println("t=" + t1); Map<String, JedisPool> map = jc.getClusterNodes();
for ( String k: map.keySet()) {
Jedis jedis = null;
JedisPool p = map.get( k );
try {
jedis = p.getResource();
t1 = p.getResource().get("t_1");
} catch (Exception e) {
p.returnBrokenResource( jedis );
jedis = null;
// TODO: handle exception
} finally{
if( jedis != null ){
p.returnResource( jedis );
}
}
System.out.println("k=" + k + ",t1=" + t1);
}
Assert.assertTrue(true);
}
结果如下
t=
k=192.168.10.229:,t1=
k=192.168.10.229:,t1=
k=192.168.10.229:,t1=
k=192.168.10.229:,t1=
k=192.168.10.229:,t1=
k=192.168.10.229:,t1=
jedis客户端的坑.
1)cluster环境下redis的slave不接受任何读写操作,
2)client端不支持keys批量操作,不支持select dbNum操作,只有一个db:select 0
3)JedisCluster 的info()等单机函数无法调用,返回(No way to dispatch this command to Redis Cluster)错误,.
4)JedisCluster 没有针对byte[]的API,需要自己扩展(附件是我加的基于byte[]的BinaryJedisCluster api)