首次使用Redis记录【3】

根据上文配置使用后 

会出现如下问题:

    this.jedis = this.jedisPool.getResource();方法长时间无响应且控制台不报错,方法堵塞。

 实际情况:

    大概调用了该方法八九次之后就会开始堵塞,无响应。

原因:类似数据库连接池获取事务或者IO流对象,用完之后需要关闭。 

解决:每次使用完资源之后关闭资源,this.jedis.close()后即可。

 

网上参考:

 

jedisPool.getResource()方法长时间无响应并且不报错,方法阻塞

  这个锅真的是蓝瘦,,,表现是项目重启后一开始可以,过段时间,哎,不行了,,,,查了一半天发现,原因在于jedis连接用完了,然后默认给阻塞了,然后直到获得连接。看下我的错误代码

//获得连接
Jedis jedis = jedisPool.getResource();
log.info("get jedis success");
jedis.set(wlId, encryUser);
jedis.expire(wlId,1800);

然后我跑了200个for循环,调用他,排查错误,大概就是到48次的时候,阻塞掉了,不报错也没反应,说明jedis连接池在我电脑配置上是开了48个以内。
查看他的官网文档,其中有一段new JedisCluster(hpset, 30)中默认了MaxWaitMillis为-1。,

BlockWhenExhausted:连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
MaxWaitMillis:获取连接时的最大等待毫秒数(如果设置为阻塞时
BlockWhenExhausted,如果超时就抛异常,小于零:阻塞不确定的时间, 默认-1

BlockWhenExhauste这个方法默认参数-1,就是说当阻塞的时候我阻塞多久啊,默认永久阻塞。而一开始没有阻塞是因为一开始连接并没有耗尽,这个就是原因所在。咱们修改配置使得阻塞短时间或者不阻塞或者在你用完jedis的时候关闭连接就好了啊,具体情况视你的业务场景而定,我是把我的连接给关闭了。
  修改后的代码

//获得连接
Jedis jedis = jedisPool.getResource();
log.info("get jedis success");
jedis.set(wlId, encryUser);
jedis.expire(wlId,1800);
//用完后乖乖的关掉,就是因为它
jedis.close();

posted on   丶柚子  阅读(248)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示