redis连接池使用连接不释放的问题

一般来说,通过JedisPool获取连接Jedis,使用完了需要关闭,这样,后续的应用需要连接的时候就会正常获取到连接,在一般的开发中也不会出现问题,但是今天遇到了一个问题,就是当连接不关闭,连接池中的连接耗尽,那么程序获取连接就会出现异常。

默认,JedisPoolConfig中设置的最大连接数是8,这里为了测试连接不释放的问题,我们修改将它配置为4。

public static JedisPool jedisPool;
static{
	JedisPoolConfig config = new JedisPoolConfig();
	config.setMaxTotal(4);
	config.setMaxIdle(200);
	config.setMaxWaitMillis(1000*100);
	config.setTestOnBorrow(false);
	jedisPool = new JedisPool(config, "127.0.0.1", 6379);
}

然后定义一个从redis的一个队列中获取队列元素的方法:

public static List<String> brpop(int timeout,String key){
	Jedis jedis = null;
	try {
		jedis = jedisPool.getResource();
		return jedis.brpop(timeout,key);
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}finally{
		//jedis.close();
	}
}

这里将finally代码块中的关闭连接的代码注释,是为了模拟不关闭连接的情况。

public static void main(String[
Python 中使用 Redis 连接池可以有效管理对 Redis 数据库的连接,避免频繁创建和销毁连接带来的开销。下面将详细介绍如何设置、使用以及释放 Redis连接。 ### 设置 Redis 连接池 首先需要安装 `redis-py` 库 (如果还没有的话),可以通过 pip 安装: ```shell pip install redis ``` 然后你可以通过以下方式配置并初始化一个 Redis 连接池实例: ```python import redis # 创建Redis连接池,默认最大连接数为10 pool = redis.ConnectionPool(host='localhost', port=6379, db=0) # 使用连接池创建StrictRedisRedis客户端实例 r_client = redis.Redis(connection_pool=pool) ``` 这种方式允许你在应用程序的同部分共享这个单一的连接资源集合(即连接池),而是每次都新建单独的连接。 ### 使用与自动释放 当你从基于上述代码片段构造出来的 `r_client` 对象执行命令时,并需要显式地去获取或关闭单个连接;实际上,在每次操作背后,都会有一个可用的连接从池中取出用于发送请求到服务器端并且接收响应数据。一旦该次交互完成,则会立即将此链接归还给连接池等待下一次分配。 因此,通常情况下你无需担心手动处理每个具体的数据库会话 - 框架已经帮你妥善安排好了这一点! 但是如果你确实想要明确控制某些情况下的行为模式(例如当异常发生导致未能正常结束某个事务链路等特殊情况),也可以选择更细致的操作步骤如获得当前线程所使用的实际socket引用等等...过对于大多数应用场景来说并必要这样做。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值