问题描述
jedis使用的单节点模式,集成spring配置如下:
<bean class='redis.clients.jedis.JedisPoolConfig'> <property name='maxTotal' value='600' /> <property name='maxIdle' value='300' /> <property name='maxWaitMillis' value='1000' /> <property name='testOnBorrow' value='true' /></bean> <bean class='redis.clients.jedis.JedisPool'> <constructor-arg index='0' ref='jedisPoolConfig' /> <constructor-arg index='1' value='127.0.0.1' /> <constructor-arg index='2' value='6379' type='int' /> <constructor-arg index='3' value='60000' type='int' /> <constructor-arg index='4' value='123456'/></bean>
工具代码如下:
@Resource private JedisPool jedisPool; @Override public Jedis getJedis() {return jedisPool.getResource(); }
业务代码如下:
for(int i = 2000; i<3000; i++) { Jedis jedis = redisDao.getJedis(); jedis.set('user:' + i, jedis.toString()); System.out.println(jedis); set.add(jedis.toString());}
在上面的代码中,当循环到600次的时候,就会报出拿不到连接的错误,而600恰好是配置中的连接个数;并且jedis连接不会在使用结束后进行释放(因为报错后,再次请求这个方法,连一个连接都拿不到了)。
如果在代码的循环中加入
jedis.close();
则效果就不一样了,可以循环结束,并且打印的jedis对象是同一个连接地址。
这种情况下,要么在业务代码层使用结束后进行关闭,要把jedis所有的方法都单独进行一次封装,在封装的代码里面进行关闭连接,难道没有其他好的办法了吗?
问题解答
回答1:没豆豆了 打扰了没豆豆了 打扰了没豆豆了 打扰了没豆豆了 打扰了没豆豆了 打扰了没豆豆了 打扰了没豆豆了 打扰了