/**
* 判断 redis 是否可以连接成功
*
* @param
* @return
*/
public Map<String, Object> urlLink(T_redis record) {
String redisType = record.getRedis_type();
String url = record.getUrl();
List<Map<String, Object>> list = new ArrayList<>();
int pre = url.lastIndexOf("/");
int suffix = url.lastIndexOf("@");
int index = url.lastIndexOf("?");
String password = url.substring(pre + 1, suffix);
String[] clusterList = url.substring(suffix + 1, index).split(",");
for (int i = 0; i < clusterList.length; i++) {
String host = clusterList[i].substring(0, clusterList[i].indexOf(":"));
String post = clusterList[i].substring(clusterList[i].indexOf(":") + 1);
Map<String, Object> map2 = new HashMap<>();
map2.put("host", host);
map2.put("post", post);
list.add(i, map2);
}
if (RedisType.SINGLE.name().equals(redisType)) {
return SingleTpyeLink(list, password);
} else if (RedisType.CLUSTER.name().equals(redisType)) {
return ClusterTpyeLink(list, password);
} else {
Set<String> set = new HashSet<>();
int nameIndex = url.lastIndexOf("=");
String masterName = url.substring(nameIndex + 1);
for (String ipPost : clusterList) {
set.add(ipPost);
}
return SentinelTpyeLink(set, password, masterName);
}
}
/**
* Single 连接测试方法
*
* @param list
* @param password
* @return
*/
public Map<String, Object> SingleTpyeLink(List<Map<String, Object>> list, String password) {
Map<String, Object> linkMap = new HashMap<>();
try {
String host = String.valueOf(list.get(0).get("host"));
int post = Integer.parseInt((String) list.get(0).get("post"));
Jedis jedis = new Jedis(host, post);
jedis.auth(password);
String ping = jedis.ping();
if ("PONG".equals(ping)) {
linkMap.put("linkState", true);
}
} catch (Exception e) {
linkMap.put("linkState", false);
}
return linkMap;
}
/**
* CLUSTER 连接测试方法
*
* @param list
* @param password
* @return
*/
public Map<String, Object> ClusterTpyeLink(List<Map<String, Object>> list, String password) {
Set<HostAndPort> clusterNodeList = new HashSet<HostAndPort>();
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
Map<String, Object> linkMap = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
String host = String.valueOf(list.get(i).get("host"));
int post = Integer.parseInt(String.valueOf(list.get(i).get("post")));
clusterNodeList.add(new HostAndPort(host, post));
}
try {
JedisCluster jedisCluster = new JedisCluster(clusterNodeList, 5000, 5000, 5, password, jedisPoolConfig);
jedisCluster.setex("key_test", 10, "val_test");
String key_test = jedisCluster.get("key_test");
if ("val_test".equals(key_test)) {
linkMap.put("linkState", true);
}
} catch (Exception e) {
linkMap.put("linkState", false);
}
return linkMap;
}
/**
* sentinel 连接测试方法
*
* @param
* @param password
* @return
*/
public Map<String, Object> SentinelTpyeLink(Set<String> set, String password, String masterName) {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
Map<String, Object> linkMap = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
try {
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, set, jedisPoolConfig, 5000, password);
Jedis jedis = jedisSentinelPool.getResource();
jedis.setex("key_test", 10, "val_test");
String key_test = jedis.get("key_test");
if ("val_test".equals(key_test)) {
linkMap.put("linkState", true);
} else {
linkMap.put("linkState", false);
}
} catch (Exception e) {
linkMap.put("linkState", false);
}
return linkMap;
}
Redis 三种模式(Single 、Cluster、Sentinel)的连接方式
最新推荐文章于 2024-04-03 08:34:02 发布