最近项目中使用了redis数据库,由于不熟悉中间出现了很多情况,在解决过程中往往会因为解决一个地方造成好几处的错误,为了加深印象,一一记录一下。
项目一开始使用的redis是别的同事安装好的,并不知道版本号,而且找不到配置文件,因为项目赶时间我们就仓促的选择了一个jedis.jar(2.1)版本和commons-pool.jar(1.6),这两个jar包在网上也很好搜到,后来根据实际情况将redis升级到了3.0稳定版,jedis使用了2.7的jar包,commons-pool使用了2.4的jar包。
这里还是给大家一个从官网下载的连接
redis: http://redis.io/clients (从该链接里可以选择对应的redis客户端查看)
jedis: https://github.com/xetorthio/jedis/tree/master
commons-pool :http://commons.apache.org/proper/commons-pool/download_pool.cgi
项目问题的起因是大家最熟悉的redis数据库连接不够,报redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool异常,
针对这一问题,我们项目中调大连接池的管理的最大数量,就是调用JedisPoolConfig类中的setMaxActive()方法(该方法在2.0以后commons-pool的jar包下已经不存在了,替代的是set.setMaxTotal()方法,具体后续再说),和修改最大等待时间,使用config.setMaxWait()方法(该方法在commons-pool 2.0以后的jar也不存在了,使用config.setMaxWaitMillis()方法替代)。所有的这些都配置好了以后,项目的中的连接数确实增大了,但是使用连接池释放的连接在server端一直不能关闭或关闭的不及时(在linux下可以使用命令查看数据量:netstat -anp|grep redis|wc),所以这样一样没有解决问题的根本,还得继续寻找原因。
客户端的程序经过好几次的修改和跟踪,问题依然存在,于是判断是在这个机器上的其他项目的程序在连接redis没有释放资源,于是我们项目redis服务的问题,根据网上的资料和官网的介绍需要修改redis的