`
kavy
  • 浏览: 891557 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用JedisPool来连接Twemproxy

 
阅读更多

这里主要是配置的问题:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <bean id="jedisConfig" class="redis.clients.jedis.JedisPoolConfig">  
  2. <property name="maxActive" value="50" />   
  3. <property name="maxIdle" value="10" />   
  4. <property name="maxWait" value="1000" />   
  5. <property name="testOnBorrow" value="true />   


这里的配置testOnBorrow只能配置为false  否则会报错

 

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)

原因:通过 JedisPool.getResource();从连接池中获取连接的时候会对连接进行检验:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. if(_testOnBorrow &&!_factory.validateObject(latch.getPair().value)) {  
  2.       throw new Exception("ValidateObject failed");  
  3.  }  

 

 

而检验的方法就是

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. public boolean validateObject(final Object obj) {  
  2.         if (obj instanceof Jedis) {  
  3.             final Jedis jedis = (Jedis) obj;  
  4.             try {  
  5.                 return jedis.isConnected() && jedis.ping().equals("PONG");  
  6.             } catch (final Exception e) {  
  7.                 return false;  
  8.             }  
  9.         } else {  
  10.             return false;  
  11.         }  
  12.     }  


看到了在JedisFactory里的实现,除了判断连接状态,还会通过Ping0来判断连接的可用性

 

而TwemProxy本身是不支持ping命令的。

解决方法:1,暂且设置testOnBorrow=false(默认值,其实还是不够的,因为TimerTask还是会去校验IDLE对象,如果真要这么干还要设置.testWhileIdle=false,后台不会校验到)

                  2,修改Proxy是器支持ping命令

 

转自:http://blog.csdn.net/luyee2010/article/details/17452733

分享到:
评论

相关推荐

    jedis pool配置

    在这个示例中,我们创建了一个JedisPool实例,设置了连接池配置,并在try-with-resources语句中获取和使用Jedis实例。完成操作后,确保连接池被正确关闭,释放所有资源。 对于数据缓存操作,Jedis提供了多种方法,...

    linux中安装redis和jedis及jedispool

    linux中安装redis和jedis及jedispool; redis安装所遇到的问题;

    jedisPool配置1

    JedisPool是Redis客户端Jedis的一个关键组件,它提供了一种池化的机制来管理多个Jedis实例,从而提高性能和资源利用效率。在配置JedisPool时,了解其参数的意义至关重要,以确保正确地调整和优化连接池的行为。以下...

    jedispool连redis高并发卡死的问题

    jedispool是一种高性能的redis客户端连接池,它可以帮助开发者快速的连接redis服务器,并提供了许多高级特性来提高性能和可靠性。然而,在高并发的情况下,jedispool可能会出现卡死的问题,本文将会详细介绍jedis...

    jedis-2.9.0+commons-pool2-2.4.2redis依赖包

    JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ``` 4. 从连接池获取Jedis实例进行操作: ```java Jedis jedis = jedisPool.getResource(); try { jedis.set("key", "value"); ...

    28拓展 7:妙手仁心 —— 优雅地使用 Jedis(1).md

    例如,使用`Jedis`类来连接Redis服务器并设置一个键值对可以这样写: ```java Jedis jedis = new Jedis("localhost"); jedis.set("mykey", "myvalue"); ``` ### JedisPool的重要性 对于生产环境中的应用程序来说...

    jedis-2.9.0.jar和commons-pool2-2.6.0.jar下载(jedis连接redis数据库)

    3. **连接池配置**: 使用Apache Commons Pool配置JedisPool,这将管理连接的创建、复用和回收。 ```java JedisPoolConfig poolConfig = new JedisPoolConfig(); // 设置最大连接数、最大空闲连接等参数 Jedis...

    redis连接池jar jedis+common

    4. **使用JedisPool**:在需要使用Jedis时,从池中borrow一个实例,执行操作后返回给连接池,而不是直接关闭。 四、连接池的优势 1. **性能提升**:避免了频繁创建和销毁连接的开销,提高了应用的响应速度。 2. **...

    jedis(java连接redis)

    JedisPool pool = new JedisPool(poolConfig, "localhost", 6379); Jedis resource = pool.getResource(); ``` 3. **基本操作** - **字符串操作**:设置和获取键值对。 ```java jedis.set("key", "value"); ...

    详谈Jedis连接池的使用

    在上面的代码中,我们首先获取了一个JedisPool对象,然后使用getResource()方法获取一个可用的Jedis资源。接着,我们使用该资源执行Redis操作,并在finally块中释放资源。 三、释放资源 释放资源是使用Jedis连接池...

    java连接redis/jedis连接池/jedis相关工具/jedis对象存取

    在Java中,我们可以使用Apache Commons Pool2库来实现Jedis连接池。以下是一个简单的Jedis连接池配置示例: ```java import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public ...

    Redis 、Redis 连接池、JedisPool

    4.使用方法:只需要将jar 放入项目 lib 下面 ,然后将redis.properties 文件放入指定文件夹下面,配置系统环境变量名“JAVAAPP_CONFIG_HOME”路径指向存放redis.properties 文件的路径 5.调用类 JedisUtil_...

    Jedis出现connection timeout问题解决方法(JedisPool连接池使用实例)

    解决这个问题的一种常见策略是使用Jedis的连接池JedisPool,它提供了更高效和可控的资源管理机制。 JedisPool的工作原理是维护一个Jedis实例的池,当需要与Redis交互时,可以从池中借用一个实例,使用完毕后归还给...

    jedis+commons-pool2的jar包.rar

    在这个例子中,我们首先创建了一个JedisPoolConfig实例,设置了连接池的最大和最小连接数,然后用这个配置创建了JedisPool。在main方法中,我们从池中获取一个Jedis实例,进行set和get操作,最后确保Jedis实例被正确...

    redis-pool-jedis需要的jar包

    import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisClient { private static JedisPool pool; static { JedisPoolConfig config = new JedisPoolConfig()...

    redis的Java客户端jedis池的介绍及使用.rar

    2. 从JedisPool获取连接并使用: ```java try (Jedis jedis = jedisPool.getResource()) { jedis.set("key", "value"); String value = jedis.get("key"); System.out.println(value); } ``` 3. 使用完毕后,...

    jedis 和 common-pool

    在Jedis 2.7.0版本中,它使用了Apache Commons Pool 2.3来实现连接池功能。解压`pool2-2.3.zip`后,你会得到`commons-pool2-2.3.jar`,同样需要将其添加至项目类路径。使用Jedis连接池的基本配置如下: 1. 引入依赖...

    使用java时间连接池连接redis,单例模式和集群模式.docx

    * JedisPool:JedisPool 是一个连接池类,负责管理与 Redis 服务器的连接。 * JedisCommands:JedisCommands 是一个命令接口,定义了可以在 Redis 服务器上执行的命令。 工程文件包 在连接 Redis 集群时,我们需要...

    jedis简单实例

    - **连接池管理**:为了提高性能和资源利用效率,推荐使用Jedis连接池(JedisPool)。 - **Pipeline和Batch操作**:通过批量发送命令,减少网络延迟,提高性能。 - **脚本支持**:Jedis支持Lua脚本,可以在服务器...

Global site tag (gtag.js) - Google Analytics