这里主要是配置的问题:
- <bean id="jedisConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxActive" value="50" />
- <property name="maxIdle" value="10" />
- <property name="maxWait" value="1000" />
- <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();从连接池中获取连接的时候会对连接进行检验:
- if(_testOnBorrow &&!_factory.validateObject(latch.getPair().value)) {
- throw new Exception("ValidateObject failed");
- }
而检验的方法就是
- public boolean validateObject(final Object obj) {
- if (obj instanceof Jedis) {
- final Jedis jedis = (Jedis) obj;
- try {
- return jedis.isConnected() && jedis.ping().equals("PONG");
- } catch (final Exception e) {
- return false;
- }
- } else {
- return false;
- }
- }
看到了在JedisFactory里的实现,除了判断连接状态,还会通过Ping0来判断连接的可用性
而TwemProxy本身是不支持ping命令的。
解决方法:1,暂且设置testOnBorrow=false(默认值,其实还是不够的,因为TimerTask还是会去校验IDLE对象,如果真要这么干还要设置.testWhileIdle=false,后台不会校验到)
2,修改Proxy是器支持ping命令
相关推荐
在这个示例中,我们创建了一个JedisPool实例,设置了连接池配置,并在try-with-resources语句中获取和使用Jedis实例。完成操作后,确保连接池被正确关闭,释放所有资源。 对于数据缓存操作,Jedis提供了多种方法,...
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
JedisPool是Redis客户端Jedis的一个关键组件,它提供了一种池化的机制来管理多个Jedis实例,从而提高性能和资源利用效率。在配置JedisPool时,了解其参数的意义至关重要,以确保正确地调整和优化连接池的行为。以下...
jedispool是一种高性能的redis客户端连接池,它可以帮助开发者快速的连接redis服务器,并提供了许多高级特性来提高性能和可靠性。然而,在高并发的情况下,jedispool可能会出现卡死的问题,本文将会详细介绍jedis...
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ``` 4. 从连接池获取Jedis实例进行操作: ```java Jedis jedis = jedisPool.getResource(); try { jedis.set("key", "value"); ...
例如,使用`Jedis`类来连接Redis服务器并设置一个键值对可以这样写: ```java Jedis jedis = new Jedis("localhost"); jedis.set("mykey", "myvalue"); ``` ### JedisPool的重要性 对于生产环境中的应用程序来说...
3. **连接池配置**: 使用Apache Commons Pool配置JedisPool,这将管理连接的创建、复用和回收。 ```java JedisPoolConfig poolConfig = new JedisPoolConfig(); // 设置最大连接数、最大空闲连接等参数 Jedis...
4. **使用JedisPool**:在需要使用Jedis时,从池中borrow一个实例,执行操作后返回给连接池,而不是直接关闭。 四、连接池的优势 1. **性能提升**:避免了频繁创建和销毁连接的开销,提高了应用的响应速度。 2. **...
JedisPool pool = new JedisPool(poolConfig, "localhost", 6379); Jedis resource = pool.getResource(); ``` 3. **基本操作** - **字符串操作**:设置和获取键值对。 ```java jedis.set("key", "value"); ...
在上面的代码中,我们首先获取了一个JedisPool对象,然后使用getResource()方法获取一个可用的Jedis资源。接着,我们使用该资源执行Redis操作,并在finally块中释放资源。 三、释放资源 释放资源是使用Jedis连接池...
在Java中,我们可以使用Apache Commons Pool2库来实现Jedis连接池。以下是一个简单的Jedis连接池配置示例: ```java import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public ...
4.使用方法:只需要将jar 放入项目 lib 下面 ,然后将redis.properties 文件放入指定文件夹下面,配置系统环境变量名“JAVAAPP_CONFIG_HOME”路径指向存放redis.properties 文件的路径 5.调用类 JedisUtil_...
解决这个问题的一种常见策略是使用Jedis的连接池JedisPool,它提供了更高效和可控的资源管理机制。 JedisPool的工作原理是维护一个Jedis实例的池,当需要与Redis交互时,可以从池中借用一个实例,使用完毕后归还给...
在这个例子中,我们首先创建了一个JedisPoolConfig实例,设置了连接池的最大和最小连接数,然后用这个配置创建了JedisPool。在main方法中,我们从池中获取一个Jedis实例,进行set和get操作,最后确保Jedis实例被正确...
import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisClient { private static JedisPool pool; static { JedisPoolConfig config = new JedisPoolConfig()...
2. 从JedisPool获取连接并使用: ```java try (Jedis jedis = jedisPool.getResource()) { jedis.set("key", "value"); String value = jedis.get("key"); System.out.println(value); } ``` 3. 使用完毕后,...
在Jedis 2.7.0版本中,它使用了Apache Commons Pool 2.3来实现连接池功能。解压`pool2-2.3.zip`后,你会得到`commons-pool2-2.3.jar`,同样需要将其添加至项目类路径。使用Jedis连接池的基本配置如下: 1. 引入依赖...
* JedisPool:JedisPool 是一个连接池类,负责管理与 Redis 服务器的连接。 * JedisCommands:JedisCommands 是一个命令接口,定义了可以在 Redis 服务器上执行的命令。 工程文件包 在连接 Redis 集群时,我们需要...
- **连接池管理**:为了提高性能和资源利用效率,推荐使用Jedis连接池(JedisPool)。 - **Pipeline和Batch操作**:通过批量发送命令,减少网络延迟,提高性能。 - **脚本支持**:Jedis支持Lua脚本,可以在服务器...