
org.tinygroup.jedis.util.JedisUtil Maven / Gradle / Ivy
package org.tinygroup.jedis.util;
import java.util.ArrayList;
import java.util.List;
import org.tinygroup.beancontainer.BeanContainer;
import org.tinygroup.beancontainer.BeanContainerFactory;
import org.tinygroup.commons.tools.StringUtil;
import org.tinygroup.jedis.config.JedisConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.Protocol;
import redis.clients.jedis.exceptions.JedisConnectionException;
public class JedisUtil {
// 若有服务器fail,定时轮询间隔时间
private static int FAILOVERTIME = 10000;
public static int getFailOverTime() {
return FAILOVERTIME;
}
public static void setFailOverTime(int failOverTime) {
JedisUtil.FAILOVERTIME = failOverTime;
}
private JedisUtil() {
}
public static JedisPool createJedisPool(JedisConfig jedisConfig,
ClassLoader loader) {
// 设置默认参数
String host = StringUtil.isBlank(jedisConfig.getHost()) ? Protocol.DEFAULT_HOST
: jedisConfig.getHost();
int port = jedisConfig.getPort() <= 0 ? Protocol.DEFAULT_PORT
: jedisConfig.getPort();
int timeout = jedisConfig.getTimeout() < 0 ? Protocol.DEFAULT_TIMEOUT
: jedisConfig.getTimeout();
int database = jedisConfig.getDatabase() < 0 ? Protocol.DEFAULT_DATABASE
: jedisConfig.getDatabase();
// 实例化jedis连接池
JedisPool jedisPool = new JedisPool(getJedisPoolConfig(
jedisConfig.getPoolConfig(), loader), host, port, timeout,
jedisConfig.getPassword(), database,
jedisConfig.getClientName());
return jedisPool;
}
public static JedisPoolConfig getJedisPoolConfig(String poolConfig,
ClassLoader loader) {
if (StringUtil.isBlank(poolConfig)) {
return new JedisPoolConfig();
}
BeanContainer> container = BeanContainerFactory
.getBeanContainer(loader);
JedisPoolConfig jedisPoolConfig = container
.getBean(poolConfig);
return jedisPoolConfig;
}
public static JedisShardInfo createJedisShardInfo(JedisConfig jedisConfig) {
JedisShardInfo info = new JedisShardInfo(jedisConfig.getHost(),
jedisConfig.getPort(), jedisConfig.getTimeout());
info.setPassword(jedisConfig.getPassword());
return info;
}
public static String toSimpleString(String host, int port) {
return host + ":" + port;
}
// public static Jedis choose(List currentlist,List skipList)
// {
// List list = newList(currentlist, skipList);
// if (list.size() == 0) {
// return null;
// }
// int totalWeight = list.size();
// int random = (int) (Math.random() * totalWeight);
// Jedis j = list.get(random);
// try {
// j.connect();
// return j;
// } catch (JedisConnectionException ex) {
// skipList.add(j);
// List newList = newList(list, j);
// return chooseWithRemove(newList,skipList);
// }
// }
public static Jedis choose(List list, List skipList) {
if (list.size() == 0) {
return null;
}
int totalWeight = list.size();
int random = (int) (Math.random() * totalWeight);
Jedis j = list.get(random);
try {
j.ping();
if (j.ping().equals("PONG")) {
return j;
}
return chooseAgain(list, skipList, j);
} catch (JedisConnectionException ex) {
return chooseAgain(list, skipList, j);
}
}
private static Jedis chooseAgain(List list, List skipList,
Jedis j) {
skipList.add(j);
list.remove(j);
return choose(list, skipList);
}
// public static Jedis choose(List list) {
// if (list.size() == 0) {
// return null;
// }
// int totalWeight = list.size();
// int random = (int) (Math.random() * totalWeight);
// Jedis j = list.get(random);
// try {
// j.connect();
// return j;
// } catch (JedisConnectionException ex) {
// List newList = newList(list, j);
// return choose(newList);
// }
// }
//
// private static List newList(List jedises, Jedis jedis) {
// List list = new ArrayList();
// for (Jedis j : jedises) {
// if (j == jedis) {
// continue;
// }
// list.add(j);
// }
// return list;
// }
public static List newList(List jedises, List skipJedis) {
List list = new ArrayList();
for (Jedis j : jedises) {
if (skipJedis.contains(j)) {
continue;
}
list.add(j);
}
return list;
}
public static List copy(List jedises) {
List list = new ArrayList();
for (Jedis j : jedises) {
list.add(j);
}
return list;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy