JedisPool、JedisPooled傻傻分不清楚

最近,测试同学在对一个我新写的接口进行单机压测时,前几秒可用率正常,但几秒后可用率便掉为了 0,现象甚是诡异。接口逻辑较为简单,仅仅是查询redis 然后将结果返回。最后发现一个规律,即正常的调用次数,和jedis设置的最大连接数一致,超过最大连接数时,开始抛出无法获取jedis链接的异常。

排查结果是:JedisPool并不会主动释放连接,需要手动释放,因无法自动释放连接,导致随着请求的增加连接耗尽、抛出异常导致可用率下降。

为什么会出现这个原因呢?

因为在另外一个项目里,使用的是JedisPooled,JedisPooled是可以自动进行连接释放的,于是想当然的认为JedisPool也会自动进行连接的释放。

当你从 JedisPool 中获取一个 Jedis 实例后,使用完成后需要手动将其返回到连接池中。这是通过调用 jedis.close() 方法来实现的。虽然 close() 方法并不真正关闭连接,而是将连接返回到池中以供后续使用。

edisPooled 是 Jedis 3.0 及以后的版本中引入的一个连接池实现,当你从 JedisPooled 中获取一个 Jedis 实例并使用完毕后,无需手动调用 close() 方法来释放连接。JedisPooled 会在使用结束后自动归还连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值