使用redis做缓存,遇到Could not return the resource to the pool异常怎么办呐!


使用redis做缓存,短短几天就遇到两次redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool异常,内心处在奔溃边缘!


第一次

由于我的redis是安装在远程阿里云服务器上的,但我事先没有在redis.conf配置文件中做相关配置,导致连接不上redis服务,具体操作可查看 : 项目部署—连接不上远程redis服务怎么办?


第二次

问题:项目跑在阿里云服务器上,项目正常运行!但每当访问多几次后,就会开始报这个异常啦!但重启redis服务后,发现又可以正常访问了!继续访问一段时间后,又会出现同样的问题。

原因:调用jedis连接后,未及时释放连接,造成资源占用,连接池无连接可用,自然就无法从连接池中获取连接资源啦。

/**
  * 根据key名,获取其存储数据
  * @param key
  * @return
  */
public String get(String key){
     String value = null;
     try{
         //获取指定key的存储数据
         value = jedis.get(key);
     }catch (Exception e){
         e.printStackTrace();
     }
     return value;
 }

 /**
  * 添加记录,如果记录已存在则覆盖原有的value
  * @param key
  * @param value
  * @return
  */
public String set(String key,String value){
     String state = null;
     try{
         //设置指定key的存储数据
         state = jedis.set(key,value);
     }catch (Exception e){
         e.printStackTrace();
     }
     return state;
 }

解决:添加jedis.close()操作,释放连接,然后再重启redis服务,问题解决啦

/**
 * 根据key名,获取其存储数据
 * @param key
 * @return
 */
public String get(String key){
    String value = null;
    try{
        //获取指定key的存储数据
        value = jedis.get(key);
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        //关闭jedis连接,避免资源占用,造成连接池无连接可用
        jedis.close();
    }
    return value;
}

/**
 * 添加记录,如果记录已存在则覆盖原有的value
 * @param key
 * @param value
 * @return
 */
public String set(String key,String value){
    String state = null;
    try{
        //设置指定key的存储数据
        state = jedis.set(key,value);
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        //关闭jedis连接,避免资源占用,造成连接池无连接可用
        jedis.close();
    }
    return state;
}



查看redis连接池连接数的命令:info clients

106.13.202.401:6379> info clients
# Clients
connected_clients:12
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:0
106.13.202.401:6379>

由以上信息可知当前连接池连接数为12

你可能感兴趣的:(Redis)