在使用jedis连接redis并调用publish方法发布消息时,出现了ArrayIndexOutOfBoundsException异常,当时使用的是jedis2.1.0版本,查看源代码发现是write方法中通过递增count,向缓存字节数组中写入数据时出现的ArrayIndexOutOfBoundsException,而且该异常是偶发的,并不是必现的,因此原因也不好追查。
之前在别的模块也遇到过jedis连接redis时出现的各种问题,例如还有下面的异常:
org.jivesoftware.openfire.RedisConnection - Subscribing failed with exception:
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe
at redis.clients.jedis.Connection.flush(Connection.java:66)
at redis.clients.jedis.JedisPubSub.proceed(JedisPubSub.java:82)
at redis.clients.jedis.Jedis.subscribe(Jedis.java:1971)
at org.jivesoftware.openfire.RedisConnection$1.run(RedisConnection.java:116)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
at redis.clients.util.RedisOutputStream.flushBuffer(RedisOutputStream.java:29)
at redis.clients.util.RedisOutputStream.flush(RedisOutputStream.java:227)
at redis.clients.jedis.Connection.flush(Connection.java:64)
... 4 more
后来解决的方式就是替换了一个新版本的jedis的jar包——jedis2.5.1,需要提醒的是,这个版本中使用的commons-pool2的是commons-pool2-2.2.jar,需要Java 6.0+。
如果项目中同时用到了commons DBCP,那么需要注意,如果你使用的是commons-dbcp-1.4,那还需要保留原有的commons-pool1.x(Java 6.0+),否则需要将commons-dbcp升级到2.x版本,而且commons-dbcp2-2.0.1需要Java 7.0+。
处理替换jar,在释放redis连接方面也做了部分改动,会重试几次连接和释放。
相关推荐
可以用 JedisPool 创建一些可靠 Jedis 实例,可以从池中拿到 Jedis 的实例。 Jedis 的基本操作 Jedis 提供了多种基本操作,包括设置值、获取值、追加值、删除值等。 * 设置值:使用 `set` 方法可以设置一个值,...
主要介绍了Java Jedis NOAUTH Authentication required问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本文将详细介绍Jedis中实现的与Redis命令对应的Java方法,帮助开发者理解如何在Java项目中调用这些方法以实现不同的Redis操作。 首先,了解Redis的键(key)操作是进行任何数据操作的基础。在Jedis中,提供了以下与...
下面将逐一介绍如何将Jedis中的常用命令替换为Redisson中的对应方法。 1. **获取键值** (`GET`) - **Jedis**: `jedis.get(key)` - **Redisson**: `RBucket<String> rBucket = redisson.getBucket(key); rBucket....
解决这个问题的一种常见策略是使用Jedis的连接池JedisPool,它提供了更高效和可控的资源管理机制。 JedisPool的工作原理是维护一个Jedis实例的池,当需要与Redis交互时,可以从池中借用一个实例,使用完毕后归还给...
在源码中,`Jedis`类的方法接收各种参数,如字符串、整数、列表等,这些参数在内部会被转换为字节数组,符合Redis的二进制安全协议。 5. **响应解析**: Redis服务器的回复会被Jedis解析为适当的数据类型,如`...
赠送jar包:jedis-2.9.0.jar; 赠送原API文档:jedis-2.9.0-javadoc.jar; 赠送源代码:jedis-2.9.0-sources.jar; 包含翻译后的API文档:jedis-2.9.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId...
赠送jar包:jedis-3.6.0.jar; 赠送原API文档:jedis-3.6.0-javadoc.jar; 赠送源代码:jedis-3.6.0-sources.jar; 赠送Maven依赖信息文件:jedis-3.6.0.pom; 包含翻译后的API文档:jedis-3.6.0-javadoc-API文档-...
3. **错误处理**:正确处理可能出现的异常,例如超时、连接断开等。 4. **性能调优**:考虑使用pipeline、批处理和连接池来提升性能。 总之,Jedis作为Redis的Java客户端,提供了丰富的功能,让开发人员能够轻松地...
4. **错误处理**:提供了更完善的错误处理机制,当出现异常时,Jedis会抛出相应的异常类,帮助开发者快速定位问题。 ### 三、使用Jedis操作Redis 1. **连接Redis**:首先,你需要创建一个Jedis实例,然后通过`...
- 如果项目中使用了连接池,如JedisPool,那么模板类可能会包含从池中获取和归还连接的方法。 在实际使用中,这个Jedis操作模板类可以大大简化对Redis的操作,使得代码更加整洁,同时也易于维护。同时,通过博客...
在实际项目中,开发人员通常会将`jedis-2.1.0.jar`和`jedis-2.0.0.jar`这样的库文件包含到项目的类路径中,以便调用Jedis的API进行Redis操作。需要注意的是,由于版本差异,某些API或特性可能只存在于特定版本中,...
这里我们详细探讨一下Jedis中与Redis命令相关的API。 1. `set(String key, String value)`: 这个方法用于将指定的`key`设置为`value`。如果`key`已存在,它的值将被更新;如果不存在,一个新的键值对会被创建。 2....
Jedis对可能出现的网络异常、超时等问题进行了处理,当发生异常时,会尝试重新连接或重试操作。例如,当连接断开时,Jedis会尝试从连接池中获取新的连接,保证服务的连续性。 总结: 通过对Jedis 3.0.0源码的深入...
标题中的“jedis相关jar包”指的是用于操作Redis数据库的Java客户端库Jedis的相关依赖文件。Jedis是一个高效、轻量级的Java客户端,它使得Java开发者能够方便地与Redis进行交互,执行各种数据操作。 描述中提到了两...
要开始使用 Jedis,首先将其作为依赖项添加到您的 Java 项目中。如果使用 Maven: <groupId>redis.clients <artifactId>jedis <version>4.3.0 对于许多应用程序,最好使用连接池。实例化 Jedis 连接池: Jedis...
赠送jar包:jedis-2.8.0.jar; 赠送原API文档:jedis-2.8.0-javadoc.jar; 赠送源代码:jedis-2.8.0-sources.jar; 赠送Maven依赖信息文件:jedis-2.8.0.pom; 包含翻译后的API文档:jedis-2.8.0-javadoc-API文档-...
3. **事务**:Jedis支持Redis的事务机制,通过`Multi()`、`exec()`和`discard()`等方法,可以批量执行多个命令,并确保它们在一个原子操作中完成。 4. **发布/订阅**:Jedis提供了`subscribe()`和`publish()`方法,...
jedis5.1.0.jar
jedis-2.9.0.jar jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar ...