-
急求大婶指导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服务器设置
redis 连接报错 GET_LIKE_ERROR 处理过程.rar
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>'
1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ...
需要使用Redis连接池的话,还需commons-pool包,提供了强大的功能,包含最新的jar包
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...
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
redis缓存需要的jar commons-pool.jar jedis-1.5.2.jar
Java操作Redis,实现String、List、Map的set和get,并且提供封装和Junit测试类,方便快捷的实现java对redis进行操作。
RedisPool Redis的连接池 依存关系 RedisPool只需要hiredis 安装 在Debian系统上安装hiredis: sudo apt-get install libhiredis-dev 或手动: git clone https://github.com/redis/hiredis.git cd hiredis & ...
redis和java操作redis的所有资源redis3.2+jedis2.8.jar+common-pool2.jar+common-pool2-source.rar
redisredis redis redis redis
aredis-code-demo.7z aredis 连接redis 的demo 解压后导入eclipse可直接运行 参考: test\org\aredis\test\HelloRedis.java docs\examples\Basic.java aredis 的源码及所有测试用例
The keys must match a given glob-style pattern.(This command not block the redis)ExampleGet the cluster state: $redis-cluster-tool -a 127.0.0.1:34501 -C cluster_state -r master master[127.0.0.1...
Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows ...
Redis实战 Redis实战 Redis实战 Redis实战 Redis实战 Redis实战 Redis实战
redis2.9所需jar包
Redis 思维导图 Redis Redis Redis
mysql,redis客户端连接池和线程池的C/C++编程实现mysql,redis客户端连接池和线程池的C/C++编程实现