Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java绝地(redis)无法连接_Java_Redis_Connect_Jedis - Fatal编程技术网

java绝地(redis)无法连接

java绝地(redis)无法连接,java,redis,connect,jedis,Java,Redis,Connect,Jedis,我正试图在java应用程序中使用Jedis连接到Redis。我正在实例化一个对象,当我获取资源时,它抛出一个异常,表示它无法返回资源。但奇怪的是,如果我只是实例化一个绝地对象,它可以毫无问题地连接,而且我可以更改数据 以下是我的RedisDatabase类: package me.joeleoli.proxylink.database; import me.joeleoli.proxylink.ProxyLink; import redis.clients.jedis.Jedis; impor

我正试图在java应用程序中使用Jedis连接到Redis。我正在实例化一个对象,当我获取资源时,它抛出一个异常,表示它无法返回资源。但奇怪的是,如果我只是实例化一个绝地对象,它可以毫无问题地连接,而且我可以更改数据

以下是我的RedisDatabase类:

package me.joeleoli.proxylink.database;

import me.joeleoli.proxylink.ProxyLink;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisDatabase {

    private JedisPool pool;

    public RedisDatabase(String host, int port, String password) {
        ProxyLink.getInstance().getLogger().info("Attempting to establish Redis connection " + host + ":" + port);

        this.pool = new JedisPool(host, port);

        try (Jedis jedis = this.pool.getResource()) {
            if (password != null && !password.equals("")) {
                jedis.auth(password);
            }

            jedis.select(0);
            jedis.close();
        }
    }

    public JedisPool getPool() {
        return this.pool;
    }

}
这是我的错误:

22:16:15 [INFO] [ProxyLink] Attempting to establish Redis connection 127.0.0.1:6379
22:16:15 [WARNING] Exception encountered when loading plugin: ProxyLink
redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:106)
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:12)
    at redis.clients.jedis.Jedis.close(Jedis.java:3206)
    at me.joeleoli.proxylink.database.RedisDatabase.<init>(RedisDatabase.java:23)
    at me.joeleoli.proxylink.ProxyLink.onEnable(ProxyLink.java:71)
    at net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:227)
    at net.md_5.bungee.BungeeCord.start(BungeeCord.java:273)
    at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:111)
    at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool
    at redis.clients.util.Pool.returnResourceObject(Pool.java:61)
    at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:103)
    ... 8 more
Caused by: java.lang.IllegalStateException: Object has already been returned to this pool or is invalid
    at org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:551)
    at redis.clients.util.Pool.returnResourceObject(Pool.java:59)
    ... 9 more
22:16:15[INFO][ProxyLink]正在尝试建立Redis连接127.0.0.1:6379
22:16:15[警告]加载插件时遇到异常:ProxyLink
redis.clients.jedis.exceptions.jedisception:无法将资源返回池
位于redis.clients.jedis.JedisPool.returnResource(JedisPool.java:106)
位于redis.clients.jedis.JedisPool.returnResource(JedisPool.java:12)
在redis.clients.jedis.jedis.close(jedis.java:3206)
at me.joeleoli.proxylink.database.RedisDatabase.(RedisDatabase.java:23)
at me.joeleolik.proxylink.proxylink.oneable(proxylink.java:71)
位于net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:227)
在net.md_5.bungee.BungeeCord.start(BungeeCord.java:273)
位于net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:111)
at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
原因:redis.clients.jedis.exceptions.jedisception:无法将资源返回池
位于redis.clients.util.Pool.returnResourceObject(Pool.java:61)
位于redis.clients.jedis.JedisPool.returnResource(JedisPool.java:103)
... 8个以上
原因:java.lang.IllegalStateException:对象已返回到此池或无效
位于org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:551)
位于redis.clients.util.Pool.returnResourceObject(Pool.java:59)
... 9更多

您的代码的问题是在try with resource块中调用
jedis.close()
。具有的“试用资源”块在该块退出时关闭您的资源。因为您已经关闭了资源,所以在块退出之前,您会调用close两次


删除对绝地武士的调用。关闭块内的,只需使用资源试用功能。

你的proxylink是什么,异常似乎是由你的代码引起的proxylink@JoelEvans,你可以在你的项目中使用这个替代方案作为alternative@GuangshengZuo目前,,ProxyLink所做的只是实例化RedisDatabase类。所以它不会干扰。@kaviranga我宁愿使用Redis。如果ProxyLink实例化RedisDatabase类,它如何实例化RedisDatabase类?它将调用RedisDatabase(字符串主机、int端口、字符串密码)进行构造,对吗?如果是这样,它将一次又一次地执行'ProxyLink.getInstance()。