今天发现jedis 2.0.0 在使用pipeline时,如果结果是null,会有如下异常
java.lang.NullPointerException
at java.lang.String.(String.java:515)
at redis.clients.util.SafeEncoder.encode(SafeEncoder.java:28)
at redis.clients.jedis.BuilderFactory$5.build(BuilderFactory.java:55)
at redis.clients.jedis.BuilderFactory$5.build(BuilderFactory.java:58)
at redis.clients.jedis.Response.get(Response.java:27)
看了下源码,Response.get 中没有对data为null的情况进行处理
public T get() {
if (!set) {
throw new JedisDataException(
"Please close pipeline or multi block before calling this method.");
}
if (!built) {
response = builder.build(data);
this.data = null;
built = true;
}
return response;
}
官网查了一下https://github.com/xetorthio/jedis/issues/286
上面说在2.1.0中fix了
结果直接升级了项目中的jedis 从2.0.0到2.1.0 项目中依赖它的jar没重编译
但出来类似如下问题
java.lang.NoSuchMethodError: redis.clients.jedis.Jedis.sadd(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
官方那边也有
https://github.com/xetorthio/jedis/issues/303
如果依赖它的jar重编译就OK了
问题在于
2.0.0是
Long sadd(final String key, final String member)
2.1.0是
Long sadd(final String key, final String... members)
redis 的标准sadd 是 http://redis.io/commands/sadd
SADD key member [member ...]
2.1.0是标准化了
如果换成2.1.0后,不重编译,自然就NoSuchMethodError
相关jar重编译后
原来的
jedis.sadd("foo", "bar");
会变成
jedis.sadd("foo", new String[]{"bar"});
反编译下jar就能看到了
没在官方找到类似chang log的东西,有人知道在什么地方吗?
自己比较了一下,主要有如下变化(不完整)
和sadd类似的有 srem hdel zrem
Long zadd(final String key, final Map<Double, String> scoreMembers)
Long rpush(final String key, final String string)
TO
Long rpush(final String key, final String... strings)
类似的有 lpush
zrange(final String key, final int start, final int end)
TO
zrange(final String key, final long start, final long end)
类似的有 zrevrange zrangeWithScores zrevrangeWithScores zremrangeByRank
和ByScore相关的,原来的 min max score 参数都是double类型
2.1.0中 每个函数都增加了一个 min max score 都是string类型的版本
来处理score为如下情况的时候
-inf +inf
(1 (2
增加内容
增加了在redis 2.6 中和Lua script相关的接口
List<String> configGet(final String pattern)
String configSet(final String parameter, final String value)
List<Slowlog> slowlogGet(long entries)
分享到:
相关推荐
以下是对Jedis 2.0.0的详细解释和相关知识点: 一、Jedis简介 Jedis是一个纯Java实现的Redis客户端,由Xavier Lecot开发并维护。它支持Redis的各种命令,包括数据结构如字符串、哈希、集合、有序集合,以及发布/...
《Jedis 2.0.0 API 文档详解》 Jedis 是一个高效的 Java 客户端,专门用于连接和操作 Redis 数据库。Redis 是一个高性能的键值数据存储系统,广泛应用于缓存、消息队列、分布式锁等多种场景。Jedis 2.0.0 版本的...
为了在Java应用中与Redis进行交互,我们需要依赖相关的库,这里提到的`jedis-2.0.0.jar`和`commons-pool-1.5.5.jar`正是两个关键的组件。 `jedis-2.0.0.jar`是Jedis的二进制发行版,Jedis是一个用Java编写的Redis...
Jedis2.0 API,Jedis是Redis java客户端
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
标题 "jedis-2.1.0.jar+commons-pool-1.6.jar" 提供了两个关键组件的信息:Jedis 和 Commons Pool。这两个库在Java开发中常用于与Redis数据库进行交互。Jedis是Java的一个开源客户端,专门用于操作Redis,而Commons ...
**Jedis 2.1.0:连接Redis的Java客户端** Jedis是Java社区中广泛使用的Redis客户端库,它提供了丰富的API,使得开发者能够轻松地在Java应用中操作Redis数据库。Jedis 2.1.0是这个库的一个版本,包含了源代码和对应...
jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 edis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠
**Jedis:Redis的Java客户端实现** Jedis是Redis数据存储系统的一个强大且高效的Java客户端。Redis是一个开源的、基于内存的数据结构存储系统,可作为数据库、缓存和消息代理使用。它支持多种数据结构,如字符串、...
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更...
在实际项目中,开发人员通常会将`jedis-2.1.0.jar`和`jedis-2.0.0.jar`这样的库文件包含到项目的类路径中,以便调用Jedis的API进行Redis操作。需要注意的是,由于版本差异,某些API或特性可能只存在于特定版本中,...
标题中的"jedis-2.1.0.zip"是一个包含Jedis 2.1.0版本的压缩包,这表明我们可以使用这个版本的Jedis与Redis服务器进行交互。Jedis是用Java编写的,它允许开发者通过Java程序直接访问Redis服务器,执行各种命令,如...
在"jedis-2.1.0-sources.jar"中,包含了Jedis库的源代码,这对于我们深入理解其内部实现、调试或扩展功能非常有价值。通过查看源码,我们可以了解到以下关键知识点: 1. **连接管理**:Jedis提供了连接池...
标题中的"jedis-2.1.0.jar"和"commons-pool-1.5.4.jar"分别指的是两个Java库文件,它们是用于在Java应用程序中与Redis内存数据存储进行交互的重要工具。Redis是一个高性能的键值数据库,广泛应用于缓存、消息中间件...
调用Redis的相关方法 字符串数据类型(String)接口说明 字符串类型是Redis中最为基础的数据存储类型 它在Redis中是二进制安全的 这便意味着该类型可以接受任何格式的数据 如JPEG图像数据或Json对象描述信息等 在...
**Jedis 2.0.0:Java 集成 Redis 的关键库** Redis 是一个高性能的键值数据库,常用于构建实时应用、缓存、消息队列等场景。Java 开发者通常会使用 Jedis 这个客户端库来与 Redis 服务器进行交互。Jedis 2.0.0 是该...
`jedis-2.0.0.jar`是Jedis的库文件,我们需要将其添加到Java项目的类路径中以便使用Jedis与Redis通信。`install_redis.sh`则是一个Redis的安装脚本,通常包含了一系列配置和启动Redis服务器的命令。 **Redis的安装...
标题中的"conmons-pool-1.6.jar"和"jedis-2.1.0.jar"是两个关键的Java库文件,它们在Java开发中用于与Redis数据库进行交互。Redis是一个高性能的键值存储系统,常被用作缓存和数据持久化层。 首先,我们来详细了解...