我正在使用 Jedis 连接池来管理 Redis 服务器的连接。以下是我的示例代码:
public Set<String> getTopArticleList(int start, int end) {
Set<String> list = null;
Jedis j = JedisFactory.getInstance().getJedisPool().getResource();
Pipeline pipe = j.pipelined();
try {
// do stuff with redis
pipe.sync();
} catch (JedisConnectionException jex) {
JedisFactory.getInstance().getJedisPool().returnBrokenResource(j);
} finally {
JedisFactory.getInstance().getJedisPool().returnResource(j);
}
return list;
}
创建和检索Jedis池的代码:
class JedisFactory {
private static JedisPool jedisPool;
public JedisFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
jedisPool = new JedisPool(
poolConfig,
RedisDBConfig.HOST,
RedisDBConfig.PORT,
RedisDBConfig.TIMEOUT,
RedisDBConfig.PASSWORD
);
}
public JedisPool getJedisPool() {
return jedisPool;
}
public static JedisFactory getInstance() {
if (instance == null) {
instance = new JedisFactory();
}
return instance;
}
}
问题在于达到了限制连接数后,无法再访问网站。我做错了什么吗?
Jedis
是从一个池中获取的,那么Jedis.close()
将自动为您调用JedisPool.returnBrokenResource()
或JedisPool.returnResource()
。 - Jannik Jochem