Redis连接池获取失败踩坑记(redis连接池获取为空)
作为一个熟悉和运用Redis的开发人员,在项目开发过程中我们经常遇上Redis连接池获取失败的问题,那么该如何解决呢?本文结合实际出现过的坑,让我们一起来看一下吧。
一、原因
1. 第一种情况就是由于Redis客户端比服务端版本高产生的问题。通常将Redis配置在应用本身往往不需要考虑此问题,但如果使用远程连接Redis才需要考虑是否Redis版本协调问题;
2. 第二种情况是Redis服务端超出最大连接数。按照Redis官方介绍,Redis中默认最大连接数为1024,也可以在启动Redis时增加maxclients参数来设置最大连接数,但客户端不能超出最大连接数,否则会报错;
3. 第三种情况则是Redis服务的异常,需要检查Redis服务端的日志文件,看看是否出现了错误,比如 Redis报出WARNING overcommit_memory。
二、解决
1. 解决版本不匹配时,客户端和服务端的版本要一致,除了可以升级应用程序至更新版本(最好),也可以降低Redis服务器端的版本;
2. 解决超出最大连接数限制时,除了增加maxclients参数之外,如果需要可以增设客户端连接Redis的最大线程数;
3. 解决Redis服务异常时,根据Redis的日志文件判断出问题的原因,并采取对应的措施进行处理,是的Redis能够恢复正常工作。
以上就是Redis连接池获取失败的踩坑记。小编建议在项目开发中,要严格控制客户端版本和服务端版本,尤其是连接远程Redis时,要先确保客户端版本和服务端保持一致,同时可以根据Redis属性和当前Badis连接数平稳增加maxclients参数,来避免出现Redis连接池超出限制的情况,减少不必要的麻烦。
代码:
“`java
GenericObjectPoolConfig config;
config.setMaxTotal(500);
config.setMaxIdle(30);
config.setMinIdle(10);
config.setMaxWtMillis(3000);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
JedisPool jedisPool = new JedisPool(config, host, port, 3000, password);