2011-12-20 62 views
3

因此,Redis将zrange(和相关的排序集命令)指定为ORDERED结果集(可能没有重复的列表)。Jedis改变Redis的语义?

为什么然后Jedis(官方和推荐的REDIS客户端)上的zrange(以及相关的API)返回Set?根据定义,其中有没有排序的概念?

这是直接违反了redis操作的语义。

这是zrange jedis 2.0.0执行:


public Set<byte[]> zrange(final byte[] key, final int start, final int end) { 
     checkIsInMulti(); 
     client.zrange(key, start, end); 
     final List<byte[]> members = client.getBinaryMultiBulkReply(); 
     return new LinkedHashSet<byte[]>(members); 
    } 

Jedis贡献者,你打算解决这个问题?

+0

这可能是因为在Redis的项目中的错误更合适?我不确定我们在这里可以做些什么。 – 2011-12-20 16:04:03

+2

起初我以为这是另一个SW:TOR插件问题。 – corsiKa 2011-12-20 16:07:03

+0

肯定罗布,但我也想引发一些讨论和思考有关的人,或计划使用杰迪斯,因为这不是一个错误,这是一个非常严重的概念问题。 – 2011-12-20 16:10:01

回答

1

LinkedHashSet是一个有序集合。 API可能应该改变,以明确反映或只是返回一个列表。

这个对话更适合邮件列表,而不是SO。

+0

这是真的,但方法签名应该指定LinkedHashSet作为它的返回类型A)表明它*是*返回一个有序集合,并且B)因此客户端不必将其转换或转换为保证其订购。 – 2011-12-20 16:23:04

+1

这正是我的观点罗布。如果我需要查看Jedis的基本实现以了解Jedis的语义,Jedis并没有很好地思考,并且它的可靠性值得商榷。 @Eric,因为它返回一个Set,所以不保证排序。 – 2011-12-20 16:30:31

+0

@DavidCostaFaidella - 我们在这里相同的页面;我只是重申你对w.r.t问题的关注。 Eric的回答:) - 你提到你开了一个问题;这将是一个可能的解决方案。 – 2011-12-20 16:43:25