gpt4 book ai didi

java - JedisPool 无法连接到 telnet redis 服务器

转载 作者:可可西里 更新时间:2023-11-01 10:55:45 33 4
gpt4 key购买 nike

我的redis服务器在一个VMWare服务器中,我可以通过cli从telnet连接redis服务器:

C:\Users\Administrator>redis-cli -h 192.168.0.243 -p 6379
192.168.0.243:6379> 获取名称
(错误)NOAUTH 需要身份验证。
192.168.0.243:6379> 授权根
好的
192.168.0.243:6379> 获取名称
“泳池zzzzqqqqq”
192.168.0.243:6379>

在我的java代码中,我可以通过Jedis成功连接到redis服务器。

绝地演示:

    Jedis jedis = new Jedis(constr) ;  
jedis.auth("root");
String output ;
jedis.set( "hello", "world" ) ;
output = jedis.get( "hello") ;
System. out.println(output) ;

但是我无法通过 JedisPool 连接到 redis 服务器:这是代码:

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);
}
}
...

Redis演示

    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

你能告诉我为什么吗?
提前致谢!

最佳答案

我不确定您是否可以在 JedisPool 实例化中使用密码参数来模拟 AUTH 命令。

试试这个:

public String set(String key,String value){
Jedis jedis = null;
try {
jedis = pool.getResource();
jedis.auth("root");
return jedis.set(key, value);
} catch (Exception e) {
pool.close();
e.printStackTrace();
return "0";
} finally {
returnResource(pool, jedis);
}
}

关于java - JedisPool 无法连接到 telnet redis 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42223656/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com