Redis连接池获取失败踩坑记(redis连接池获取为空)

2023-05-08 23:48:31 连接池 获取 为空

作为一个熟悉和运用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);

				
	

相关文章