• redis 3.0 集群__使用


    参考文档

    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)

  • 相关阅读:
    对象引用与对象克隆
    谁被回收了
    SpringMVC 返回json
    html基础
    org.hibernate.HibernateException: No Session found for current thread
    VB6之SendMessage模拟拖放事件
    VB6之GIF分解
    VB6之反编译工具VBRezQ
    VB6之WebBrowser控件
    (转载)VB6之鼠标移出事件
  • 原文地址:https://www.cnblogs.com/zyguo/p/4402639.html
Copyright © 2020-2023  润新知