通過jedis連接redis單機成功,使用redis客戶端可以連接集群,但使用JedisCluster連接redis集群一直報Could not get a resource from the pool


一,問題描述:

(如題目)通過jedis連接redis單機成功,使用JedisCluster連接redis集群一直報Could not get a resource from the pool

但是使用redis客戶端可以連接集群(我使用的redis desktop manager)

在java中通過jedis連接redis單機也成功,但使用JedisCluster連接redis集群一直報Could not get a resource from the pool,

我以命令行方式操作是沒問題的,如下:

 

先貼代碼:

<!-- redis客戶端 -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.8.2</version>
</dependency>

//相關代碼如下:

JedisPoolConfig config = new JedisPoolConfig();
config =new JedisPoolConfig();
       config.setMaxTotal(60000);//設置最大連接數  
       config.setMaxIdle(1000); //設置最大空閑數 
       config.setMaxWaitMillis(3000);//設置超時時間  
       config.setTestOnBorrow(true);


// 集群結點
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7001")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7002")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7003")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7004")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7005")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7006")));

JedisCluster jc = new JedisCluster(jedisClusterNode, config);
//JedisCluster jc = new JedisCluster(jedisClusterNode);
jc.set("name", "zhangsan");
String value = jc.get("name");
System.out.println(value);

 

 

糾結了兩天也是沒sei了,就這么幾行代碼,看來看去沒問題啊,甚至上github去看作者的例子,一模一樣啊,一度懷疑人生啊;

由於我的單機版用命令行和java代碼訪問都沒問題,而且集群通過命令行方式也沒問題,所以一直沒懷疑我搭建的環境的問題,我懷疑代碼,懷疑是否是工程依賴的jedis的版本的bug,換了幾個版本還是報同樣的錯誤,最后我才開始查環境,環境的話先關了防火牆,沒用,然后再查配置文件,查到

二:找到問題:這個地方IP的問題,以上是正確的版本,以前有問題的版本的Ip是127.0.0.1,

原因是這個地方以前我沒注釋redis.conf文件中的bind 127.0.0.1 然后做集群時使用的命令是:

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

三:解決問題:

刪除以上所有里面這個node.conf文件

然后:

重新做集群:

./redis-trib.rb create --replicas 1 192.168.246.128:7001 192.168.246.128:7002 192.168.246.128:7003 192.168.246.128:7004 192.168.246.128:7005 192.168.246.128:7006

然后重新測試就解決了;

還要注意一下每個redis下面的redis.conf的配置(以下是我的):

port  7001                                        //端口7001,7002,7003        
bind 本機ip                                       //默認ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的端口,無法創建集群,我直接注釋掉了
daemonize    yes                               //redis后台運行
pidfile  /var/run/redis_7000.pid          //pidfile文件對應7000,7001,7002
cluster-enabled  yes                           //開啟集群  把注釋#去掉
cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次啟動自動生成 7001,7002,7003
cluster-node-timeout  15000                //請求超時  默認15秒,可自行設置
appendonly  yes                           //aof日志開啟  有需要就開啟,它會每次寫操作都記錄一條日志


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM