radis连接接集群方法



import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

方法一:
public class JedisClusterConnectionFactory {
   private int database;
   private String[] hostAndPort;
   private String password;
   private int timeout;
   private int    maxIdle;
   private int    minIdle;
   private int    maxActive;
   private int maxWait;
   private boolean    testOnBorrow;
   private boolean    testOnReturn;
   private int timeBetweenEvictionRunsMillis = 100*1000;//100为redis服务器允许连接空闲的时间,单位为秒
   private int minEvictableIdleTimeMillis = 140*1000;//池中的连接被驱除的最小空闲时间条件
   
   private JedisCluster cluster;
   
   public void init(){
      GenericObjectPoolConfig config = new GenericObjectPoolConfig();
      config.setMaxIdle(maxIdle);
      config.setMaxTotal(maxActive);
      config.setMaxWaitMillis(maxWait);
      config.setMinIdle(minIdle);
      config.setTestOnBorrow(testOnBorrow);
      config.setTestWhileIdle(true);
      config.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
      config.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
      config.setNumTestsPerEvictionRun(maxActive/6<3?3:maxActive/6);
      config.setBlockWhenExhausted(false);
      
      cluster = new JedisCluster(getHostAndPort(hostAndPort),timeout,config);  
   }
   
   public void destroy(){
      try {
         cluster.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   
   /**
    * 获取集群实例
    * @return
    */
   public JedisCluster getJedisCluster(){
      return cluster;
   }
   
   /**
    * 数组转成set
    * @param hostAndPort
    * @return
    */
   public static  Set<HostAndPort> getHostAndPort(String[] hostAndPort){  
        Set<HostAndPort> hap = new HashSet<HostAndPort>();  
        String[] hs = null;  
        for(String host:hostAndPort){  
            hs=host.split(":");  
            hap.add(new HostAndPort(hs[0], Integer.parseInt(hs[1])));  
        }  
        return hap;  
    }  
   
    public int getDatabase() {
      return database;
   }
   public void setDatabase(int database) {
      this.database = database;
   }
   public String[] getHostAndPort() {
      return hostAndPort;
   }

   public void setHostAndPort(String[] hostAndPort) {
      this.hostAndPort = hostAndPort;
   }
   public String getPassword() {
      return password;
   }
   public void setPassword(String password) {
      this.password = password;
   }
   public int getTimeout() {
      return timeout;
   }
   public void setTimeout(int timeout) {
      this.timeout = timeout;
   }
   public int getMaxIdle() {
      return maxIdle;
   }
   public void setMaxIdle(int maxIdle) {
      this.maxIdle = maxIdle;
   }
   public int getMinIdle() {
      return minIdle;
   }
   public void setMinIdle(int minIdle) {
      this.minIdle = minIdle;
   }
   public int getMaxActive() {
      return maxActive;
   }
   public void setMaxActive(int maxActive) {
      this.maxActive = maxActive;
   }
   public int getMaxWait() {
      return maxWait;
   }
   public void setMaxWait(int maxWait) {
      this.maxWait = maxWait;
   }
   public boolean isTestOnBorrow() {
      return testOnBorrow;
   }
   public void setTestOnBorrow(boolean testOnBorrow) {
      this.testOnBorrow = testOnBorrow;
   }
   public boolean isTestOnReturn() {
      return testOnReturn;
   }
   public void setTestOnReturn(boolean testOnReturn) {
      this.testOnReturn = testOnReturn;
   }

}

方法2:

radis_cluster=‘192.168.1.10:23,192.618.34.56:23’
def getCluster(): JedisCluster = {

  val nodes: Set[HostAndPort] = new HashSet[HostAndPort]
  val radis_arr = radis_cluster.split(",")
  for (single <- radis_arr) {
    val ip_port = single.split(":")
    nodes.add(new HostAndPort(ip_port(0), ip_port(1).toInt))
  }
  /* val poolConfig = new JedisPoolConfig
   // 最大连接数
   poolConfig.setMaxTotal(50000)
   // 最大空闲数
   poolConfig.setMaxIdle(50000)
   // 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
   // Could not get a resource from the pool
   poolConfig.setMaxWaitMillis(20000)*/
  val cluster: JedisCluster = new JedisCluster(nodes)
  cluster
}

方法3:

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.apache.log4j.Logger;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.exceptions.JedisException;


public class JedisConnFactory {
   private static Logger log = Logger.getLogger(JedisConnectionFactory.class);
   private int database;
   private String host;
   private int port;
   private String password;
   private int timeout;
   private int    maxIdle;
   private int    minIdle;
   private int    maxActive;
   private int maxWait;
   private boolean    testOnBorrow;
   private boolean    testOnReturn;
   private int timeBetweenEvictionRunsMillis = 10*1000;//300为redis服务器允许连接空闲的时间,单位为秒
   private int minEvictableIdleTimeMillis = 5*1000;//池中的连接被驱除的最小空闲时间条件 240*1000
   
    private static JedisPool jedisPool;
   
   public void init(){
      GenericObjectPoolConfig config = new GenericObjectPoolConfig();
      config.setMaxIdle(maxIdle);
      config.setMaxTotal(maxActive);
      config.setMaxWaitMillis(maxWait);
      config.setMinIdle(minIdle);
      config.setTestOnBorrow(testOnBorrow);
      config.setTestWhileIdle(true);
      config.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
      config.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
      config.setNumTestsPerEvictionRun(maxActive/6<3?3:maxActive/6);
      config.setBlockWhenExhausted(false);
      
      jedisPool = new JedisPool(config, host, port, timeout, password);
//    jedisPool = new JedisPool(config, host, port, timeout);//timeout is refer to socket's so_timeout with units millisecond
   }
   
   public void destroy(){
      jedisPool.destroy();
   }
   
   public Jedis getJedis() throws JedisException {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.select(database);    //用五
        } catch (JedisException e) {
            log.warn("failed:jedisPool getResource.", e);
            if(jedis!=null){
                jedisPool.returnBrokenResource(jedis);
            }
            throw e;
        }
        return jedis;
    }
 
    public static void release(Jedis jedis, boolean isBroken) {
        if (jedis != null) {
            if (isBroken) {
                jedisPool.returnBrokenResource(jedis);
            } else {
                jedisPool.returnResource(jedis);
            }
        }
    }
    public int getDatabase() {
      return database;
   }
   public void setDatabase(int database) {
      this.database = database;
   }
   public String getHost() {
      return host;
   }
   public void setHost(String host) {
      this.host = host;
   }
   public int getPort() {
      return port;
   }
   public void setPort(int port) {
      this.port = port;
   }
   public String getPassword() {
      return password;
   }
   public void setPassword(String password) {
      this.password = password;
   }
   public int getTimeout() {
      return timeout;
   }
   public void setTimeout(int timeout) {
      this.timeout = timeout;
   }
   public int getMaxIdle() {
      return maxIdle;
   }
   public void setMaxIdle(int maxIdle) {
      this.maxIdle = maxIdle;
   }
   public int getMinIdle() {
      return minIdle;
   }
   public void setMinIdle(int minIdle) {
      this.minIdle = minIdle;
   }
   public int getMaxActive() {
      return maxActive;
   }
   public void setMaxActive(int maxActive) {
      this.maxActive = maxActive;
   }
   public int getMaxWait() {
      return maxWait;
   }
   public void setMaxWait(int maxWait) {
      this.maxWait = maxWait;
   }
   public boolean isTestOnBorrow() {
      return testOnBorrow;
   }
   public void setTestOnBorrow(boolean testOnBorrow) {
      this.testOnBorrow = testOnBorrow;
   }
   public boolean isTestOnReturn() {
      return testOnReturn;
   }
   public void setTestOnReturn(boolean testOnReturn) {
      this.testOnReturn = testOnReturn;
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值