Redis:Could not get a resource from the pool

起初在JedisPool中配置了50个活动连接,但是程序还是经常报错:Could not get a resource from the pool,附代码 >>

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(20);
config.setMaxWaitMillis(1000 * 1);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
JedisPool pool = new JedisPool(config, "192.168.1.1", 6379);

经过测试发现程序的活动连接基本上只有1个,程序刚启动的时候可能会有2-5个活动的连接,但是过一段时间后就获取不到第二个活动的连接了,修改:

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(200);
config.setMaxIdle(50);
// 设置最小空闲数
config.setMinIdle(8);
config.setMaxWaitMillis(10000);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
// Idle时进行连接扫描
config.setTestWhileIdle(true);
// 表示idle object evitor两次扫描之间要sleep的毫秒数
config.setTimeBetweenEvictionRunsMillis(30000);
// 表示idle object evitor每次扫描的最多的对象数
config.setNumTestsPerEvictionRun(10);
// 表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
config.setMinEvictableIdleTimeMillis(60000);

JedisPool pool = new JedisPool(config, ip, port, 10000, "123456", 0);

修改之后未发现以上问题,导致错误原因可能为连接池中空闲的连接过一阵子就会自动断开,但是连接池还以为连接正常,就出现了这个错误

从连接池中获取连接的时候,可以写个循环,直到获取成功才让出循环

你可能感兴趣的:(存储数据,redis,前端,java)