首页 > 其他分享 >Jedis连接踩坑日记

Jedis连接踩坑日记

时间:2024-04-15 14:47:49浏览次数:19  
标签:JedisUtil 连接 jedis dataSource close model Jedis 日记

Jedis连接踩坑日记

背景: 线上某块业务的增删改功能全部都不可用。页面发送了xhr请求之后 状态一直处于pending状态,后端没有日志产生

排查路线与解决办法

第一:由于服务在内网里面,无法进行远程调试。所以采用比较笨的方式,在代码里面多加一些日志,最后定位

JedisUtil.getJedis().hset(RedisConstant.WHITE, model.getRdiUuid(), JSON.toJSONString(model.getRdiWhitelist().split(",")));

JedisUtil是前任封装的工具类,代码执行到这里的时候请求会处于阻塞状态
我之前一直用的是RedisTemplate来操作redis的 并没有出现过类似的情况,这也是第一次接触jedis,看完这块代码的时候没有及时发现问题,索性在chatGPT上问答了一下
gpt的答案提到了关于资源释放的关键字,然后我看了下jedis实例确实有close方法。

  @Override
  public void close() {
    if (dataSource != null) {
      JedisPoolAbstract pool = this.dataSource;
      this.dataSource = null;
      if (client.isBroken()) {
        pool.returnBrokenResource(this);
      } else {
        pool.returnResource(this);
      }
    } else {
      super.close();
    }
  }

跟踪一下代码发现close是重写了父类BinaryJedis的close方法,而BinaryJedis是实现了Closeable接口

在Java里面实现了Closeable接口的类是可以通过try with resource语法来处理资源关闭问题的,所以我们将原来的写法改成

try (Jedis jedis = JedisUtil.getJedis()) {
  jedis.hset(RedisConstant.WHITE, model.getRdiUuid(), JSON.toJSONString(model.getRdiWhitelist().split(",")));
}

验证

将jedis连接池改成5 重启项目 调用了有jedis相关的接口之后 很快后续的请求便发生了阻塞,使用try with resource语法之后 问题不再复现了。

完结 撒花!!!

标签:JedisUtil,连接,jedis,dataSource,close,model,Jedis,日记
From: https://www.cnblogs.com/sxxs/p/18135310

相关文章

  • jmeter 连接 sqlserver 数据库
    1. 将下载好的 jar 包放在 jmeter/lib 目录下,测试计划中导入 jar 包 2.添加 JDBCConnectionConfiguration 配置,参数设置如下 3. 线程组中添加 JDBCRequest,请求中连接名字(test)和步骤2 中自定义的名字(test)保持一致 4. 点击运行,查询出对应的结果 问题回......
  • IFreeSql各数据库连接字符串格式
    IFreeSql各数据库连接字符串格式 DataTypeConnectionStringDataType.MySqlDataSource=127.0.0.1;Port=3306;UserID=root;Password=root;InitialCatalog=cccddd;Charset=utf8;SslMode=none;Minpoolsize=1DataType.PostgreSQLHost=192.168.164.10;Port=5432;Us......
  • go语言连接Mogdb
    go语言连接Mogdb本文出处:https://www.modb.pro/db/3880921.环境介绍[root@mogdb-kernel-0004src]#goversion //yum安装的gogoversiongo1.16.13linux/amd64[root@mogdb-kernel-0004src]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)2.获取p......
  • day02_我的Java学习笔记 (类型转换、+做连接符、变量自增自减运算、三元运算符、键盘
    Java语言基础知识1.类型转换1.1自动类型转换1.2表达式的自动类型转换1.3强制类型转换这里得出的结果为啥是-36呢???后面高级篇再细讲。2.运算符2.1算数运算符2.1.1基本算数运算符2.1.2案例:数值拆分2.2+符号做连接符【思考1】:a+'a'为啥......
  • 日记
    2024.4.14洛谷B2074计算星期几voidf(int*num,intpower,int*ans){*num=*num%7;for(inti=1;i<=power;i++){(*ans)*=(*num);(*ans)%=7;}}intmain(){intnum=0,power=0,ans=1;scanf("%d%d",&num,&power);......
  • ES7.17.20连接时报错:java.lang.NoSuchMethodError: org.elasticsearch.client.Request
    1.报错详情:java.lang.NoSuchMethodError:org.elasticsearch.client.RequestOptions$Builder.removeHeader(Ljava/lang/String;)Lorg/elasticsearch/client/RequestOptions$Builder; atco.elastic.clients.transport.rest_client.RestClientOptions.addBuiltinHeaders(RestCli......
  • 使用java client连接ES7.17.20时报错:Caused by: java.lang.NoClassDefFoundError: Cou
    1.报错详情Causedby:java.lang.NoClassDefFoundError:Couldnotinitializeclasscom.fasterxml.jackson.databind.cfg.DatatypeFeatures$DefaultHolder atcom.fasterxml.jackson.databind.cfg.DatatypeFeatures.defaultFeatures(DatatypeFeatures.java:33)~[jackson-data......
  • 日记
    2024.4.13#include<stdio.h>voidf(intnum,int*num_1){inta,b,c,d;intnum_3;for(inti=0;i<num;i++){scanf("%d",&num_3);a=num_3/1000%10;b=num_3/100%10;c=num_3/10%10;d=num_3%......
  • 基于PyTorch框架的多层全连接神经网络实现MNIST手写数字分类
    基于PyTorch框架的多层全连接神经网络实现MNIST手写数字分类简单的三层全连接神经网络导入了PyTorch相关的库,定义了一个名为SimpleNet的类,继承自nn.Module,这个神经网络有三个全连接层,分别是layer1、layer2和layer3。在初始化函数__init__中,指定了输入维度in_dim、两个隐藏层的神......
  • 但是mac本连接苹果机时总是闪现请信任该电脑,导致不能连接电脑的解决方案
    解决方法是把USB进程杀掉,拔下设备,然后重新连接。终端运行命令杀掉USB进程:$sudokillall-STOP-cusbd然后需要输入电脑解锁密码,输入密码(不会显示,直接输入就好)之后,回车。然后拔下设备,重新连接。在macOS中,sudokillall-STOP-cusbd 命令的含义如下:sudo:以管理员权限......