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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjingao/article/details/86623992

  这个锅真的是蓝瘦,,,表现是项目重启后一开始可以,过段时间,哎,不行了,,,,查了一半天发现,原因在于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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值