jedis 升级 2.0.0 to 2.1.0


今天发现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)

猜你喜欢

转载自jimgreat.iteye.com/blog/1612497