zoukankan      html  css  js  c++  java
  • redis3.0 集群实战3

    本文主要描述使用jedis进行redis-cluster操作

     

    jedis

    jedis是redis官方推荐使用的java redis客户端,github地址为,https://github.com/xetorthio/jedis,本文使用jedis进行redis集群的操作。 
    jedis从2.3.0版本后开始支持redis cluster,不过看官方的released文档(https://github.com/xetorthio/jedis/releases)在2.3.0版本后的每个版本都会修复一些cluster相关的bug,基本上在2.6.3版本后,才开始没有cluster相关的bug,所以建议jedis版本至少大于2.6.3.目前最新版本是2.7.2.

    maven:

    <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.2</version>
    <type>jar</type>
    <scope>compile</scope>
    </dependency>
    
     

    hello world

    jedis官方推荐的helloworld:

    Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
    //Jedis Cluster will attempt to discover cluster nodes automatically
    jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));
    JedisCluster jc = new JedisCluster(jedisClusterNodes);
    jc.set("foo", "bar");
    String value = jc.get("foo");
    

    实际使用:

    private void genClusterNode() {
        clusterNodes = new HashSet<HostAndPort>();
        clusterNodes.add(new HostAndPort("192.168.137.10", 7000));
        clusterNodes.add(new HostAndPort("192.168.137.10", 7001));
        clusterNodes.add(new HostAndPort("192.168.137.10", 7002));
        clusterNodes.add(new HostAndPort("192.168.137.10", 7003));
        clusterNodes.add(new HostAndPort("192.168.137.10", 7004));
        clusterNodes.add(new HostAndPort("192.168.137.10", 7005));
    }
    
    private void genJedisConfig() {
        config = new JedisPoolConfig();
        config.setMaxTotal(1000);
        config.setMaxIdle(100);
        config.setTestOnBorrow(true);
    }
    
    public void clusterInit() {
        genClusterNode();
        genJedisConfig();
        jedisCluster = new JedisCluster(clusterNodes, 5000, config);
    }
    
    private void clusterSetKey(String key, String value) {
        jedisCluster.set(key, value);
    }
    
     

    解读

    JedisCluster是jedis封装的关于redis cluster操作的class。 
    JedisCluster里主要有两个成员变量:maxRedirections和connectionHandler。

    maxRedirections: 
        - 重试次数,在执行失败后,进行的重试次数,默认是5,
    connectionHandler:
        - cluster里面的连接管理者
        - 包括JedisClusterInfoCache,里面会缓存nodes和slots的信息,同时对于各个nodes和slots会缓存一个JedisPool
    

    因此在调用RedisCluster对象时,直接使用JedisCluster对象即可,比如在调用JedisCluster.set时:

    - JedisCluster会从connectionHandler基于key找出对应的SLOTS和NODES,并找出对应的JedisPool对象
    - 从JedisPool对象中找出可用的Jedis实例,执行Jedis对应的set操作
    

    同时在new JedisCluster的时候,还可以传入timeout参数,这里的timeout表示从redis-server读取数据的超时时间,默认的是2s,当数据量比较大的时候,可以考虑增大timeout。

  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/huxinping8800/p/7155177.html
Copyright © 2011-2022 走看看