2011-12-20 72 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