-
急求大婶指导redis Could not get a resource from the pool 异常10
功能:多台服务器同时访问redis中的队列
运行代码有时报错,有时正常,快要疯了,求大婶指导解决方案
报错信息:
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:22)
at com.bonc.text.service.crawler.RedisUtil.<init>(RedisUtil.java:24)
at com.bonc.text.service.crawler.DistributedCrawler.initCrawler(DistributedCrawler.java:53)
at com.bonc.text.service.crawler.DistributedCrawler.main(DistributedCrawler.java:80)
Caused by: java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1233)
at redis.clients.util.Pool.getResource(Pool.java:20)
... 3 more
源代码:import java.io.BufferedInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; /** * 访问Redis工具类 */ public class RedisUtil { public RedisUtil(){ initialShardedPool(); shardedJedis = shardedJedisPool.getResource(); } // redis所在IP地址 private static String IP; // 端口号 private static int PORT_NUMBER; // 队列key值 private static String KEY; //切片额客户端连接 private static ShardedJedis shardedJedis; //切片连接池 private static ShardedJedisPool shardedJedisPool; static{ Properties prop = new Properties(); InputStream in; try { in = new BufferedInputStream(RedisUtil.class.getClass().getResourceAsStream("/craw.properties")); prop.load(in); in.close(); IP = prop.getProperty("IP"); PORT_NUMBER = Integer.parseInt(prop.getProperty("PORT_NUMBER")); KEY = prop.getProperty("KEY"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 初始化切片池 */ private void initialShardedPool() { // 池基本配置 JedisPoolConfig config = new JedisPoolConfig(); //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 config.setMaxActive(-1); //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。 config.setMaxIdle(50000); //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException; config.setMaxWait(10000 * 10000); //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; config.setTestOnBorrow(true); // slave链接 List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(1000000); shards.add(new JedisShardInfo(IP, PORT_NUMBER)); // 构造池 shardedJedisPool = new ShardedJedisPool(config, shards); } /** * 返还到连接池 * * @param pool * @param redis */ public static void returnResource() { if (shardedJedis != null) { shardedJedisPool.returnResource(shardedJedis); } } /** * 从redis 队列尾部取一条数据,并删除 */ public String getUrlByRedis() { String str = shardedJedis.lpop(KEY); returnResource(); return str; } /** * 从redis 队列头部插入一条数据,首先判断是否已存在于队列中 * @param url (待插入的URL) */ public boolean insertUrlToRedis(String url){ long num = shardedJedis.lpush(KEY, url); returnResource(); if(num > 1) { return true; } return false; } /** * 判断某一URL是否存在于队列中 * @param url */ public boolean isExist(String url) { List<String> list = shardedJedis.lrange(KEY, 0, shardedJedis.llen(KEY)); returnResource(); if(list.contains(url)) { return true; } return false; } /** * 判断redis url队列中是否空 */ public boolean isNull() { long length = shardedJedis.llen(KEY); returnResource(); if(length == 0) { return true; } return false; } public static void main(String[] args) { RedisUtil ru = new RedisUtil(); System.out.println(ru.insertUrlToRedis("http://134")); } }
2014年8月20日 20:23
目前还没有答案
相关推荐
NULL 博文链接:https://sichen84.iteye.com/blog/2419876
1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成 1、监听本地1234端口 2、将Redis服务器设置
try (Jedis jedis = pool.getResource()) { jedis.set("key", "value"); String value = jedis.get("key"); } ``` Jedis还支持事务操作,可以一次执行多个命令,保证原子性: ```java jedis.multi(); // 开始...
redis 连接报错 GET_LIKE_ERROR 处理过程.rar
需要使用Redis连接池的话,还需commons-pool包,提供了强大的功能,包含最新的jar包
redis-3.0.0.gem 执行gem install redis /usr/local/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError) ...from src/redis-trib.rb:25:in `<main>'
在Redis客户端中,`commons-pool.jar`主要用于管理Redis连接池,确保高效地利用与Redis服务器的连接,避免频繁建立和关闭连接的开销。 `jedis-1.5.2.jar`是Jedis的早期版本,Jedis是一个用Java编写的Redis客户端,...
Redis Essentials is a fast-paced guide that teaches the fundamentals on data types, explains how to manage data through commands, and shares experiences from big players in the industry. We start off...
正确的redis.conf文件分享。Linux系统搭建redis集群,需要修改redis.conf里的端口号,当前文件端口号为7001.
1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ...
Centos7安装Redis安装说明
return jedisConnectionFactory.getResource(); } // 将上面的方法迁移到这里,并添加try-catch块 } ``` 然后编写Junit测试类`RedisServiceTest`: ```java @RunWith(SpringRunner.class) @SpringBootTest ...
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
from redis import Redis, ConnectionPool pool = ConnectionPool(host='localhost', port=6379, db=0) redis_client = Redis(connection_pool=pool) ``` 在这个例子中,我们创建了一个连接池,指定了Redis服务器的...
当引擎层出现慢查询时,响应时间会延长,可能导致连接池耗尽,引发“Could not get a resource from the pool”的异常。 Redis 协议本身不支持连接收敛,消息没有 ID,使得请求和响应关联困难,类似于 HTTP 1.x。...
try (Jedis jedis = pool.getResource()) { jedis.set("key", "value"); String value = jedis.get("key"); System.out.println("Value: " + value); } catch (Exception e) { e.printStackTrace(); } ...
在本场景中,我们关注的是Redis的Java客户端库Jedis以及连接池管理库Apache Commons Pool 2,具体版本为Jedis 2.9.0和Commons Pool 2.2。 **Jedis 2.9.0** Jedis是Java开发人员广泛使用的Redis客户端,它提供了丰富...
return pool.getResource(); } public static void returnResource(Jedis jedis) { jedis.close(); } } ``` 通过这样的设置,应用程序可以从连接池中获取Jedis实例,执行Redis操作后,再归还到池中以便复用。...
5. **异常处理**: 在测试代码中,还需要考虑异常处理,如网络异常、超时异常等,确保程序在出现问题时能够优雅地处理并给出反馈。 6. **事务操作**: Redis支持简单的事务(Multi、Exec),测试代码可能会涉及如何在...
4. **Resource Management** - `redis_resource.c` 管理 Redis 连接资源,确保每个连接的正确创建、使用和释放。 5. **Config Options** - `config.m4` 文件定义了编译时的配置选项,允许用户在编译扩展时自定义...