net.wicp.tams.common.redis.RedisAssit Maven / Gradle / Ivy
/*
* **********************************************************************
* Copyright (c) 2022 .
* All rights reserved.
* 项目名称:common
* 项目描述:公共的工具集
* 版权说明:本软件属andy.zhou([email protected])所有。
* ***********************************************************************
*/
package net.wicp.tams.common.redis;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import net.wicp.tams.common.Conf;
import net.wicp.tams.common.apiext.StringUtil;
import net.wicp.tams.common.redis.builder.RedisSentinelBuilderTams;
import net.wicp.tams.common.redis.builder.RedisStandaloneBuilderTams;
import net.wicp.tams.common.redis.pool.AbsPool;
import net.wicp.tams.common.redis.pool.JedisPoolTams;
import net.wicp.tams.common.redis.pool.JedisSentinelPoolTams;
import redis.clients.jedis.Jedis;
public abstract class RedisAssit {
static {
// 防止自定义classload的时错过默认的加载配置,再次加载配置文件,不覆盖已存在的项
Conf.overConf("/common-redis.properties", RedisAssit.class, false);
}
private static final Map innerPoolMap = new HashMap();
public static Map getInnerpoolmap() {
return innerPoolMap;
}
public static JedisPoolTams standalone(String serverName, String host, int port,
GenericObjectPoolConfig poolConfig) {
if (StringUtil.isNotNull(serverName) && innerPoolMap.containsKey(serverName)) {
return (JedisPoolTams) innerPoolMap.get(serverName);
}
Map data = Conf
.getAllConfigValues(String.format("%s.%s", "common.redis.redisserver", serverName), true);
GenericObjectPoolConfig poolConfigtrue = poolConfig == null ? initDefaultConfig(serverName) : poolConfig;
host = StringUtil.hasNull(host, data.get("host"));
port = port <= 0 ? getConfigInt(data, "port") : port;
RedisStandaloneBuilderTams tams=new RedisStandaloneBuilderTams();
tams.setHost(host);
tams.setPort(port);
tams.setServerName(serverName);
tams.setTimeout(getConfigInt(data, "timeout"));
tams.setPoolConfig(poolConfigtrue);
tams.init();
System.out.println("拿到的data=====================================");
data.forEach((k, v) -> System.out.println(k.concat(":::").concat(v)));
return tams.getJedisPoolTams();
}
public static JedisPoolTams standalone(String serverName) {
return standalone(serverName, null, 0, null);
}
public static JedisSentinelPoolTams sentinel(String serverName, String masterName, String[] sentinelAry,
GenericObjectPoolConfig poolConfig) {
if (StringUtil.isNotNull(serverName) && innerPoolMap.containsKey(serverName)) {
return (JedisSentinelPoolTams) innerPoolMap.get(serverName);
}
GenericObjectPoolConfig poolConfigtrue = poolConfig == null ? initDefaultConfig(serverName) : poolConfig;
Set sentinels = new HashSet<>();
for (String sentinel : sentinelAry) {
String[] sentinelArr = sentinel.split(":");
if (sentinelArr.length == 2) {
sentinels.add(sentinel);
}
}
RedisSentinelBuilderTams build=new RedisSentinelBuilderTams();
build.setMasterName(masterName);
build.setSentinels(sentinels);
build.setPoolConfig(poolConfigtrue);
build.init();
return build.getJedisSentinelPoolTams();
}
public static JedisSentinelPoolTams sentinel(String serverName, String masterName, String[] sentinelAry) {
return sentinel(serverName, masterName, sentinelAry, null);
}
public synchronized static AbsPool getPool(String serverName) {
if (StringUtil.isNotNull(serverName) && innerPoolMap.containsKey(serverName)) {
return innerPoolMap.get(serverName);
}
Map data = Conf
.getAllConfigValues(String.format("%s.%s", "common.redis.redisserver", serverName), true);
String masterName = data.get("masterName");
String sentinelAry = data.get("sentinelAry");
AbsPool retpool = null;
if (StringUtil.isNotNull(masterName) && StringUtil.isNotNull(sentinelAry)) {
String[] sentinelArys = sentinelAry.split(",");
retpool = sentinel(serverName, masterName, sentinelArys);
} else {
retpool = standalone(serverName);
}
// 测试一个连接是否正确
Jedis jedis = null;
try {
jedis = retpool.getResource();
if (!jedis.isConnected()) {
retpool.destroy();
}
} catch (Exception e) {
retpool.destroy();
} finally {
retpool.returnResource(jedis);
}
innerPoolMap.put(serverName, retpool);
return retpool;
}
// public static String getConfigValue(String serverName, String confName) {
// String conf = Conf.get(String.format("common.redis.redisserver.%s.%s", serverName, confName));
// if ("default".equalsIgnoreCase(confName) && StringUtil.isNull(conf)) {
// conf = Conf.get(String.format("common.redis.redisserver.%s.%s", serverName, "default"));
// }
// return conf;
// }
//
public static Integer getConfigInt(Map data, String confName) {
return data.containsKey(confName) ? Integer.parseInt(data.get(confName)) : null;
}
public static Boolean getConfigBoolean(Map data, String confName) {
return data.containsKey(confName) ? Boolean.parseBoolean(data.get(confName)) : null;
}
private static GenericObjectPoolConfig initDefaultConfig(String serverName) {
Map data = Conf
.getAllConfigValues(String.format("%s.%s", "common.redis.redisserver", serverName), true);
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>();
poolConfig.setMaxWaitMillis(getConfigInt(data, "maxWaitMillis"));
poolConfig.setMaxTotal(getConfigInt(data, "maxTotal"));
poolConfig.setMaxIdle(getConfigInt(data, "maxIdle"));
poolConfig.setTestOnBorrow(getConfigBoolean(data, "testOnBorrow"));
poolConfig.setTestWhileIdle(getConfigBoolean(data, "testWhileIdle"));
poolConfig.setMinIdle(getConfigInt(data, "minIdle"));
// 这里配置错误会报:UNEXPECTED END OF STREAM,原因:没有把空闲链接自动移除
poolConfig.setMinEvictableIdleTimeMillis(getConfigInt(data, "minEvictableIdleTimeMillis"));
poolConfig.setSoftMinEvictableIdleTimeMillis(getConfigInt(data, "softMinEvictableIdleTimeMillis"));
poolConfig.setNumTestsPerEvictionRun(getConfigInt(data, "numTestsPerEvictionRun"));
poolConfig.setTestOnReturn(getConfigBoolean(data, "testOnReturn"));
poolConfig.setTimeBetweenEvictionRunsMillis(getConfigInt(data, "timeBetweenEvictionRunsMillis"));
poolConfig.setBlockWhenExhausted(getConfigBoolean(data, "blockWhenExhausted"));
return poolConfig;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy