1. 程式人生 > >redis叢集出現JedisNoReachableClusterNodeException異常(No reachable node in cluster)

redis叢集出現JedisNoReachableClusterNodeException異常(No reachable node in cluster)

redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57)
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31)
    at redis.clients.jedis.JedisCluster.get(JedisCluster.java:124)
    at cn.tbnb1.service.redis.RedisCacheService.get(RedisCacheService.java:55)
    at cn.tbnb1.seckil.controller.SeckillController.resultQuery(SeckillController.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

上面是異常,

經過查詢程式碼終於發現,最終是呼叫JedisCluster.close()方法造成的。

原因:我們使用的是redis3.0的叢集,用jedis的JedisCluster.close()方法造成的叢集連線關閉的情況。 jedisCluster內部使用了池化技術,每次使用完畢都會自動釋放Jedis因此不需要關閉。如果呼叫close方法後再呼叫jedisCluster的api進行操作時就會出現如上錯誤。

夢想一定要有,萬一實現了!