jedis使用单节点模式,统一spring配置如下:
bean id=' jedis poolconfig ' class=' redis.clients.jedis.jedis poolconfig '
property name=' max total ' value=' 600 ' /
属性名称=' maxidle ' value=' 300 ' /
property name=' maxwaitmillis ' value=' 1000 ' /
property name=' testonborrow ' value=' true ' /
/bean
bean id=' Jedi spool ' class=' redis.clients.jedis.Jedi spool '
构造函数- arg index='0' ref=' jedis poolconfig ' /
构造函数- arg index='1' value=' 127.0.0.1 ' /
构造函数- arg index='2' value=' 6379 ' type=' int ' /
构造函数- arg index='3' value=' 60000 ' type=' int ' /
构造函数- arg index='4' value=' 123456 ' /
/bean
工具代码如下:
@Resource
私密Jedi spool Jedi spool;
@Override
公共jedis get jedis
返回Jedi spool.get resource (;
}
业务代码如下:
for(intI=2000; i3000; 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方法,并在封装的代码中进行闭合连接,不是没有其他好方法吗?