当前位置: 首页 > 知识库问答 >
问题:

警告r.c.j.JedisFactory:关闭redis时出错。客户。绝地武士。例外。绝地异常:无法将损坏的资源返回池

鄂坚
2023-03-14

我得到以下错误

WARN r.c.j.JedisFactory: Error while close
redis.clients.jedis.exceptions.JedisException: Could not return the broken resource to the pool

请告诉我怎么修。因为我经常犯这种错误。我认为还有一个额外的需要,就是用“尝试”和“抓住”来包装一些东西。还是其他方面有问题?我很乐意帮忙。

代码看起来像这样。

import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
import java.time.Duration;
import java.util.Objects;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.jmeter.samplers.SampleResult;

JedisPool jedisPool = (JedisPool) props.get('jedisPool');
Jedis jedis = jedisPool.getResource();
List<Object> execResult = null;

String GetIncrNumber;
int countTry = 0;

 while(execResult == null) {
            try{
                jedis.watch("Number");
                Transaction t = jedis.multi();
                Response<String> rs = t.incr("Number");
                execResult = t.exec();
                GetIncrNumber = rs.get();
                t.close();
                t = null;
                rs = null;
            } catch (Exception e){
                countTry++;
                sleep(50);
                if(countTry > 15){
                    log.error("\r\nSome error (countTry = " + countTry + ") GetIncrNumber: " + e.getMessage() + "\r\n");
                }
          }  

}


execResult.clear();
vars.put("GetIncrNumber_JM", GetIncrNumber.toString()); 

//log.info(GetIncrNumber)
  
jedisPool.returnResource(jedis);

execResult = null;
jedis = null;
jedisPool = null;

共有1个答案

黄啸
2023-03-14

也许你应该给杰迪打电话。returnBrokenResource()位于finally block中的某个位置并捕获更具体的异常?

您也可以考虑使用Jedis.close()。

顺便问一下,您是否考虑过使用Redis数据集配置而不是编写自定义代码?

 类似资料:
  • 我试图从绝地人才库中回收资源时出错了。代码如下。

  • 我已经通过了很多环节,比如绝地,无法获得绝地连接:无法从池中获得资源,无法获得绝地连接;无法从池中获取资源,但仍获取以下错误。 我在Spring Batch中使用Spring Data Redis,从mysql读取数据并写入redis DB。似乎有些连接错误。 下面的错误仅供参考。 我正在使用下面的简单配置。

  • 我们的应用程序使用并连接到,以下是我如何获得jedis资源: 这是我的绝地说唱者(统一资源管理): 是Jedis实例的容器,下面是我如何使用它: 请注意,可能非常大(例如可以达到最大8KB)。 每次我重启我们的应用程序,所有的redis连接都是正常的,但是几个小时后,异常出来了。频率变得越来越高,然后所有到Redis的连接都断开了,可以创建新的连接。 以下是我的配置: 异常堆栈跟踪:

  • 我试图从java连接到JedisCluster(ElastiCache Redis)。但是我得到了集群中没有可达节点的JedisConnectionExcema。 这是我连接JedisCluster的代码 运行这个之后我得到的异常 我查过了 正如AWS文件中提到的,我得到的回复是连接的。 这里的问题是什么?为什么我不能使用java连接到JedisCluster? 注: 我用的是jedis版本2.9

  • 根据我的理解,使用JOhm和Jedis,可以在Redis中存储/检索java类对象。我有一个问题是,JOhm是否也将java对象保存在内存中,以便下次需要该对象(与key相关联)时,从内存返回该对象,而不是每次都从Redis读取该对象?

  • 我为数据可视化工具开发了一个插件。现在我想在它里面使用redis。当我在另一个项目(不在我的插件中)中尝试下面的redis代码时,效果很好。 但当我在插件中使用绝地武士时,我得到了由java引起的和错误。为了把我的插件安装到这个数据可视化工具上。我需要创建一个jar文件,我这样做了,它在不添加jedit部分的情况下运行良好。 我正在使用IntelliJ Idea,我创建了一个工件,并从顶部菜单中的