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。

  • 相关阅读:
    二十四种设计模式:观察者模式(Observer Pattern)
    二十四种设计模式:工厂方法模式(Factory Method Pattern)
    Java迷题:等于,还是不等于?
    UCenter创始人、Discuz!创始人、管理员账号的认知(转)
    Internet Explorer 无法启用 JavaScript 怎么办?
    IIS配置PHP环境(快速最新版)(转载+自创)
    零基础学php的自学
    PHP实体层基础类
    PHP数据库链接类(PDO+Access)
    C# Memcached 缓存
  • 原文地址:https://www.cnblogs.com/huxinping8800/p/7155177.html
Copyright © 2011-2022 走看看