redis 使用jedispool 获取连接异常问题!Could not get a resource from the pool

TommyWu01 2013-10-31 10:25:54
redis 使用jedispool 获取连接异常问题!Could not get a resource from the pool

大侠们看看,是哪里的问题!谢谢



JedisUtil代码如下:

public class JedisUtil {

private Logger log = Logger.getLogger(this.getClass());
/**缓存生存时间 */
private final int expire = 60000;
/** 操作Key的方法 */
public Keys KEYS;
/** 对存储结构为String类型的操作 */
public Strings STRINGS;
/** 对存储结构为List类型的操作 */
public Lists LISTS;
/** 对存储结构为Set类型的操作 */
public Sets SETS;
/** 对存储结构为HashMap类型的操作 */
public Hash HASH;
/** 对存储结构为Set(排序的)类型的操作 */
public SortSet SORTSET;
private static JedisPool jedisPool = null;

private JedisUtil() {

}
static {
if (jedisPool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(JRedisPoolConfig.MAX_ACTIVE);
config.setMaxIdle(JRedisPoolConfig.MAX_IDLE);
config.setMaxWait(JRedisPoolConfig.MAX_WAIT);
config.setTestOnBorrow(JRedisPoolConfig.TEST_ON_BORROW);
config.setTestOnReturn(JRedisPoolConfig.TEST_ON_RETURN);
jedisPool = new JedisPool(config, JRedisPoolConfig.REDIS_IP, JRedisPoolConfig.REDIS_PORT);
}
}

public JedisPool getPool() {
return jedisPool;
}

/**
* 从jedis连接池中获取获取jedis对象
* @return
*/
public Jedis getJedis() {
return jedisPool.getResource();
}


private static final JedisUtil jedisUtil = new JedisUtil();


/**
* 获取JedisUtil实例
* @return
*/
public static JedisUtil getInstance() {
return jedisUtil;
}

/**
* 回收jedis
* @param jedis
*/
public void returnJedis(Jedis jedis) {
jedisPool.returnResource(jedis);
}


/**
* 设置过期时间
*
* @author ruan 2013-4-11
* @param key
* @param seconds
*/
public void expire(String key, int seconds) {
if (seconds <= 0) {
return;
}
Jedis jedis = getJedis();
jedis.expire(key, seconds);
returnJedis(jedis);
}

/**
* 设置默认过期时间
*
* @author ruan 2013-4-11
* @param key
*/
public void expire(String key) {
expire(key, expire);
}


//*******************************************Keys*******************************************//
public class Keys {

/**
* 清空所有key
*/
public String flushAll() {
Jedis jedis = getJedis();
String stata = jedis.flushAll();
returnJedis(jedis);
return stata;
}

/**
* 更改key
*
* @param String
* oldkey
* @param String
* newkey
* @return 状态码
* */
public String rename(String oldkey, String newkey) {
return rename(SafeEncoder.encode(oldkey),
SafeEncoder.encode(newkey));
}
}
}


JRedisPoolConfig代码如下:


public class JRedisPoolConfig {


//控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
//如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
public static final int MAX_ACTIVE=StringUtil.getInt(PropertiesUtil.getUrl("redis.pool.maxActive", "redis"));
//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
public static final int MAX_IDLE =StringUtil.getInt(PropertiesUtil.getUrl("redis.pool.maxIdle", "redis"));
//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
public static final long MAX_WAIT=StringUtil.getLong(PropertiesUtil.getUrl("redis.pool.maxWait", "redis"));
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
public static final boolean TEST_ON_BORROW=StringUtil.getBoolean(PropertiesUtil.getUrl("redis.pool.testOnBorrow", "redis"));
//在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
public static final boolean TEST_ON_RETURN=StringUtil.getBoolean(PropertiesUtil.getUrl("redis.pool.testOnReturn", "redis"));
//IP
public static final String REDIS_IP=PropertiesUtil.getUrl("redis.ip", "redis");
//Port
public static final int REDIS_PORT=StringUtil.getInt(PropertiesUtil.getUrl("redis.port", "redis"));
//Password
public static final String REDIS_PASSWORD=PropertiesUtil.getUrl("redis.password", "redis");




}



...全文
30829 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LW 2016-03-31
  • 打赏
  • 举报
回复
您这是自问自答呀
TommyWu01 2013-10-31
  • 打赏
  • 举报
回复 2
此问题已解决: 忘记设置密码了! jedisPool = new JedisPool(config, "192.168.0.117", 6379, 10000,"password");

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧