解决redisCluster 连接失败的问题

使用redis3.2.8 建立集群后,发现在连接redis 经常报连接失败。但是单独连接某个节点时,是不会报错的,经过分析终于发现了原因。
原因是这样的:我在建立集群的时候配置文件redis.conf 中
bind 127.0.0.1 192.168.6.24
在使用命令:./redis-trib.rb create --replicas 1 192.168.6.24:7000 192.168.6.24:7001 192.168.6.24:7002 192.168.6.24:7003 192.168.6.24:7004 192.168.6.24:7005
建立集群,建立完集群后,连接redis 发现有问题,后把rdis.conf 中改为:bind 192.168.6.24

所以客户端有时候会连接 127.0.0.1:****,所以就报错了。

如何解决这个问题呢:
1.删除nodes-700*.conf ,appendonly.aof , dump.rdb 这三个文件
2.启动服务
# ./redis-server 7000/redis.conf
# ./redis-server 7001/redis.conf
# ./redis-server 7002/redis.conf
# ./redis-server 7003/redis.conf
# ./redis-server 7004/redis.conf
# ./redis-server 7005/redis.conf

3.执行建群命令:
./redis-trib.rb create --replicas 1 192.168.6.24:7000 192.168.6.24:7001 192.168.6.24:7002 192.168.6.24:7003 192.168.6.24:7004 192.168.6.24:7005


4.测试:


import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

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

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

public class JedisClusterTest {


JedisCluster jedisCluster = null;

private String nameKey="test1";

/**
* 因为是测试,这里没有写单例
*/

public void before(){
//注意:这里超时时间不要太短,他会有超时重试机制。而且其他像httpclient、dubbo等RPC框架也要注意这点
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
// config.setMaxIdle(200);
// config.setMaxTotal(300);
// config.setTestOnReturn(true);
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.6.24",7000));
nodes.add(new HostAndPort("192.168.6.24",7001));
nodes.add(new HostAndPort("192.168.6.24",7002));
nodes.add(new HostAndPort("192.168.6.24",7003));
nodes.add(new HostAndPort("192.168.6.24",7005));
nodes.add(new HostAndPort("192.168.6.24",7004));


jedisCluster = new JedisCluster(nodes, 10000, 1000, 1,
config);

System.out.println(jedisCluster+"===");
for(int i=0;i<1;i++){
System.out.println(jedisCluster.set("test1"+i, "张三"+i));
System.out.println(jedisCluster.get("test1"+i));
}


}


public TreeSet<String> keys(String pattern){
// logger.debug("Start getting keys...");
TreeSet<String> keys = new TreeSet<String>();
Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();
for(String k : clusterNodes.keySet()){

System.out.println("Getting keys from: {}"+k);
JedisPool jp = clusterNodes.get(k);
Jedis connection = jp.getResource();
try {
Set<String> str = connection.keys(pattern);
System.out.println(str.toString());
keys.addAll(str);
} catch(Exception e){
// logger.error("Getting keys error: {}", e);
} finally{
System.out.println("Connection closed.");
connection.close();//用完一定要close这个链接!!!
}
}



return keys;
}


public static void main(String[] args) {

JedisClusterTest test = new JedisClusterTest();
test.before();
TreeSet<String> t = test.keys("*");
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值