Моего Redis сервер находится в VMWare Server, и я могу подключить Redis сервера из телнета кли:JedisPool не может подключиться к серверу Telnet REDIS
C:\Users\Administrator>redis-cli -h 192.168.0.243 -p 6379 192.168.0.243:6379> get name (error) NOAUTH Authentication required. 192.168.0.243:6379> auth root OK 192.168.0.243:6379> get name "pool zzzzqqqqq" 192.168.0.243:6379>
В моем Java коде, я могу подключиться к Redis сервер успешно Jedis.
JedisDemo:
Jedis jedis = new Jedis(constr) ;
jedis.auth("root");
String output ;
jedis.set("hello", "world") ;
output = jedis.get("hello") ;
System. out.println(output) ;
Но я не могу получить подключение к Redis сервер, JedisPool: вот код:
RedisUtils.java:
public class RedisUtils {
private JedisPool pool = null;
private final static String REDIS_IP = "192.168.0.243";
private final static int REDIS_PORT = 6379;
public RedisUtils() {
this(REDIS_IP,REDIS_PORT);
}
public RedisUtils(String ip, int prot) {
if (pool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(10);
config.setMaxWaitMillis(50 * 1000);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
config.setTestWhileIdle(true);
pool = new JedisPool(config, ip, prot, 100000,"root");
}
}
public RedisUtils(JedisPoolConfig config ,String ip, int prot){
if (pool == null) {
pool = new JedisPool(config,ip,prot,10000);
}
}
public RedisUtils(JedisPoolConfig config ,String ip, int prot ,int timeout){
if (pool == null) {
pool = new JedisPool(config,ip,prot,timeout);
}
}
public RedisUtils(JedisPool pool){
if (this.pool == null) {
this.pool = pool;
}
}
public String get(String key){
Jedis jedis = null;
String value = null;
try {
jedis = pool.getResource();
value = jedis.get(key);
} catch (Exception e) {
pool.close();
e.printStackTrace();
} finally {
returnResource(pool, jedis);
}
return value;
}
public String set(String key,String value){
Jedis jedis = null;
try {
jedis = pool.getResource();
return jedis.set(key, value);
} catch (Exception e) {
pool.close();
e.printStackTrace();
return "0";
} finally {
returnResource(pool, jedis);
}
}
...
RedisDemo
RedisUtils redisUtils = new RedisUtils();
redisUtils.set("name", "pool zzzzqqqqq");
System.out.println("get name : "+redisUtils.get("name"));
Результат:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:53)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
at com.mbg.redis.RedisUtils.get(RedisUtils.java:122)
at com.mbg.redis.RedisDemo.poolTest(RedisDemo.java:25)
at com.mbg.redis.RedisDemo.main(RedisDemo.java:35)
Caused by: java.lang.IllegalStateException: Pool not open
at org.apache.commons.pool2.impl.BaseGenericObjectPool.assertOpen(BaseGenericObjectPool.java:672)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:412)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
at redis.clients.util.Pool.getResource(Pool.java:49)
... 4 more
Вы можете мне сказать, почему?
Спасибо заранее!
Но это не работает, все равно спасибо. – tony