参考文档
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", 7001)); //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=1 k=192.168.10.229:7006,t1=1 k=192.168.10.229:7001,t1=1 k=192.168.10.229:7004,t1=1 k=192.168.10.229:7005,t1=1 k=192.168.10.229:7002,t1=1 k=192.168.10.229:7003,t1=1
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)