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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值