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;
}
}