From 58aa95c464ab5f3ac47902f4928f96ca8e07c599 Mon Sep 17 00:00:00 2001 From: lmar Date: Tue, 8 Mar 2011 20:19:54 +0100 Subject: [PATCH] Binary versions of ZREVRANGEBYSCORE methods, some code cleanup --- .../redis/clients/jedis/BinaryClient.java | 4 ++ .../java/redis/clients/jedis/BinaryJedis.java | 38 ++++++++++ .../clients/jedis/BinaryJedisCommands.java | 10 +++ .../clients/jedis/BinaryShardedJedis.java | 22 ++++++ src/main/java/redis/clients/jedis/Client.java | 34 +++++---- .../java/redis/clients/jedis/Commands.java | 15 ++++ src/main/java/redis/clients/jedis/Jedis.java | 65 +++++++++-------- .../java/redis/clients/jedis/Pipeline.java | 45 ++++++++++++ .../redis/clients/jedis/PipelineBlock.java | 22 ++++++ .../tests/commands/SortedSetCommandsTest.java | 69 +++++++++++++++++++ 10 files changed, 285 insertions(+), 39 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 036554c..f27a2a9 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -486,6 +486,10 @@ public class BinaryClient extends Connection { final byte[] max) { sendCommand(ZRANGEBYSCORE, key, min, max); } + public void zrevrangeByScore(final byte[] key, final byte[] max, + final byte[] min) { + sendCommand(ZREVRANGEBYSCORE, key, max, min); + } public void zrangeByScore(final byte[] key, final double min, final double max, final int offset, int count) { diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 4401042..595a9aa 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -2326,6 +2326,44 @@ public class BinaryJedis implements BinaryJedisCommands { return set; } + public Set zrevrangeByScore(final byte[] key, final double max, + final double min) { + checkIsInMulti(); + client.zrevrangeByScore(key, max, min); + return new LinkedHashSet(client.getBinaryMultiBulkReply()); + } + + public Set zrevrangeByScore(final byte[] key, final byte[] max, + final byte[] min) { + checkIsInMulti(); + client.zrevrangeByScore(key, max, min); + return new LinkedHashSet(client.getBinaryMultiBulkReply()); + } + + public Set zrevrangeByScore(final byte[] key, final double max, + final double min, final int offset, final int count) { + checkIsInMulti(); + client.zrevrangeByScore(key, max, min, offset, count); + return new LinkedHashSet(client.getBinaryMultiBulkReply()); + } + + public Set zrevrangeByScoreWithScores(final byte[] key, + final double max, final double min) { + checkIsInMulti(); + client.zrevrangeByScoreWithScores(key, max, min); + Set set = getBinaryTupledSet(); + return set; + } + + public Set zrevrangeByScoreWithScores(final byte[] key, + final double max, final double min, final int offset, + final int count) { + checkIsInMulti(); + client.zrevrangeByScoreWithScores(key, max, min, offset, count); + Set set = getBinaryTupledSet(); + return set; + } + /** * Remove all elements in the sorted set at key with rank between start and * end. Start and end are 0-based with rank 0 being the element with the diff --git a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java index 241734f..ef8aebd 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java @@ -139,6 +139,16 @@ public interface BinaryJedisCommands { Set zrangeByScoreWithScores(byte[] key, double min, double max, int offset, int count); + Set zrevrangeByScore(byte[] key, double max, double min); + + Set zrevrangeByScore(byte[] key, double max, double min, int offset, + int count); + + Set zrevrangeByScoreWithScores(byte[] key, double max, double min); + + Set zrevrangeByScoreWithScores(byte[] key, double max, double min, + int offset, int count); + Long zremrangeByRank(byte[] key, int start, int end); Long zremrangeByScore(byte[] key, double start, double end); diff --git a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java index 1143121..113511b 100644 --- a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java @@ -357,6 +357,28 @@ public class BinaryShardedJedis extends Sharded return j.zrangeByScoreWithScores(key, min, max, offset, count); } + public Set zrevrangeByScore(byte[] key, double max, double min) { + Jedis j = getShard(key); + return j.zrevrangeByScore(key, max, min); + } + + public Set zrevrangeByScore(byte[] key, double max, double min, + int offset, int count) { + Jedis j = getShard(key); + return j.zrevrangeByScore(key, max, min, offset, count); + } + + public Set zrevrangeByScoreWithScores(byte[] key, double max, double min) { + Jedis j = getShard(key); + return j.zrevrangeByScoreWithScores(key, max, min); + } + + public Set zrevrangeByScoreWithScores(byte[] key, double max, + double min, int offset, int count) { + Jedis j = getShard(key); + return j.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + public Long zremrangeByRank(byte[] key, int start, int end) { Jedis j = getShard(key); return j.zremrangeByRank(key, start, end); diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index d51a07f..3bcc072 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -412,10 +412,6 @@ public class Client extends BinaryClient implements Commands { final double max) { zrangeByScore(SafeEncoder.encode(key), min, max); } - public void zrevrangeByScore(final String key, final double max, - final double min) { - zrevrangeByScore(SafeEncoder.encode(key), max, min); - } public void zrangeByScore(final String key, final String min, final String max) { @@ -427,25 +423,39 @@ public class Client extends BinaryClient implements Commands { final double max, final int offset, int count) { zrangeByScore(SafeEncoder.encode(key), min, max, offset, count); } - public void zrevrangeByScore(final String key, final double max, - final double min, final int offset, int count) { - zrevrangeByScore(SafeEncoder.encode(key), max, min, offset, count); - } public void zrangeByScoreWithScores(final String key, final double min, final double max) { zrangeByScoreWithScores(SafeEncoder.encode(key), min, max); } - public void zrevrangeByScoreWithScores(final String key, final double max, - final double min) { - zrevrangeByScoreWithScores(SafeEncoder.encode(key), max, min); - } public void zrangeByScoreWithScores(final String key, final double min, final double max, final int offset, final int count) { zrangeByScoreWithScores(SafeEncoder.encode(key), min, max, offset, count); } + + public void zrevrangeByScore(final String key, final double max, + final double min) { + zrevrangeByScore(SafeEncoder.encode(key), max, min); + } + + public void zrevrangeByScore(final String key, final String max, + final String min) { + zrevrangeByScore(SafeEncoder.encode(key), SafeEncoder.encode(max), + SafeEncoder.encode(min)); + } + + public void zrevrangeByScore(final String key, final double max, + final double min, final int offset, int count) { + zrevrangeByScore(SafeEncoder.encode(key), max, min, offset, count); + } + + public void zrevrangeByScoreWithScores(final String key, final double max, + final double min) { + zrevrangeByScoreWithScores(SafeEncoder.encode(key), max, min); + } + public void zrevrangeByScoreWithScores(final String key, final double max, final double min, final int offset, final int count) { zrevrangeByScoreWithScores(SafeEncoder.encode(key), max, min, offset, diff --git a/src/main/java/redis/clients/jedis/Commands.java b/src/main/java/redis/clients/jedis/Commands.java index 36db6c0..977f8d0 100644 --- a/src/main/java/redis/clients/jedis/Commands.java +++ b/src/main/java/redis/clients/jedis/Commands.java @@ -197,6 +197,21 @@ public interface Commands { public void zrangeByScoreWithScores(final String key, final double min, final double max, final int offset, final int count); + public void zrevrangeByScore(final String key, final double max, + final double min); + + public void zrevrangeByScore(final String key, final String max, + final String min); + + public void zrevrangeByScore(final String key, final double max, + final double min, final int offset, int count); + + public void zrevrangeByScoreWithScores(final String key, final double max, + final double min); + + public void zrevrangeByScoreWithScores(final String key, final double max, + final double min, final int offset, final int count); + public void zremrangeByRank(final String key, final int start, final int end); public void zremrangeByScore(final String key, final double start, diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 25df755..dd1c541 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2085,12 +2085,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { client.zrangeByScore(key, min, max); return new LinkedHashSet(client.getMultiBulkReply()); } - public Set zrevrangeByScore(final String key, final double max, - final double min) { - runChecks(); - client.zrevrangeByScore(key, max, min); - return new LinkedHashSet(client.getMultiBulkReply()); - } public Set zrangeByScore(final String key, final String min, final String max) { @@ -2161,12 +2155,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { client.zrangeByScore(key, min, max, offset, count); return new LinkedHashSet(client.getMultiBulkReply()); } - public Set zrevrangeByScore(final String key, final double max, - final double min, final int offset, final int count) { - runChecks(); - client.zrevrangeByScore(key, max, min, offset, count); - return new LinkedHashSet(client.getMultiBulkReply()); - } /** * Return the all the elements in the sorted set at key with a score between @@ -2231,13 +2219,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { Set set = getTupledSet(); return set; } - public Set zrevrangeByScoreWithScores(final String key, - final double max, final double min) { - runChecks(); - client.zrevrangeByScoreWithScores(key, max, min); - Set set = getTupledSet(); - return set; - } /** * Return the all the elements in the sorted set at key with a score between @@ -2303,14 +2284,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { Set set = getTupledSet(); return set; } - public Set zrevrangeByScoreWithScores(final String key, - final double max, final double min, final int offset, - final int count) { - runChecks(); - client.zrevrangeByScoreWithScores(key, max, min, offset, count); - Set set = getTupledSet(); - return set; - } private Set getTupledSet() { runChecks(); @@ -2325,6 +2298,44 @@ public class Jedis extends BinaryJedis implements JedisCommands { return set; } + public Set zrevrangeByScore(final String key, final double max, + final double min) { + runChecks(); + client.zrevrangeByScore(key, max, min); + return new LinkedHashSet(client.getMultiBulkReply()); + } + + public Set zrevrangeByScore(final String key, final String max, + final String min) { + runChecks(); + client.zrevrangeByScore(key, max, min); + return new LinkedHashSet(client.getMultiBulkReply()); + } + + public Set zrevrangeByScore(final String key, final double max, + final double min, final int offset, final int count) { + runChecks(); + client.zrevrangeByScore(key, max, min, offset, count); + return new LinkedHashSet(client.getMultiBulkReply()); + } + + public Set zrevrangeByScoreWithScores(final String key, + final double max, final double min) { + runChecks(); + client.zrevrangeByScoreWithScores(key, max, min); + Set set = getTupledSet(); + return set; + } + + public Set zrevrangeByScoreWithScores(final String key, + final double max, final double min, final int offset, + final int count) { + runChecks(); + client.zrevrangeByScoreWithScores(key, max, min, offset, count); + Set set = getTupledSet(); + return set; + } + /** * Remove all elements in the sorted set at key with rank between start and * end. Start and end are 0-based with rank 0 being the element with the diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java index 8dc7fd0..337025f 100644 --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -722,6 +722,51 @@ public class Pipeline implements Commands { client.zrangeByScoreWithScores(key, min, max, offset, count); } + //-- + public void zrevrangeByScore(String key, double max, double min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(byte[] key, double max, double min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(String key, String max, String min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(byte[] key, byte[] max, byte[] min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(String key, double max, double min, int offset, + int count) { + client.zrevrangeByScore(key, max, min, offset, count); + } + + public void zrevrangeByScore(byte[] key, double max, double min, int offset, + int count) { + client.zrevrangeByScore(key, max, min, offset, count); + } + + public void zrevrangeByScoreWithScores(String key, double max, double min) { + client.zrevrangeByScoreWithScores(key, max, min); + } + + public void zrevrangeByScoreWithScores(byte[] key, double max, double min) { + client.zrevrangeByScoreWithScores(key, max, min); + } + + public void zrevrangeByScoreWithScores(String key, double max, double min, + int offset, int count) { + client.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + + public void zrevrangeByScoreWithScores(byte[] key, double max, double min, + int offset, int count) { + client.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + public void zrangeWithScores(String key, int start, int end) { client.zrangeWithScores(key, start, end); } diff --git a/src/main/java/redis/clients/jedis/PipelineBlock.java b/src/main/java/redis/clients/jedis/PipelineBlock.java index dbde9c4..dbcbc59 100644 --- a/src/main/java/redis/clients/jedis/PipelineBlock.java +++ b/src/main/java/redis/clients/jedis/PipelineBlock.java @@ -374,6 +374,28 @@ public abstract class PipelineBlock implements Commands { client.zrangeByScoreWithScores(key, min, max, offset, count); } + public void zrevrangeByScore(String key, double max, double min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(String key, String max, String min) { + client.zrevrangeByScore(key, max, min); + } + + public void zrevrangeByScore(String key, double max, double min, int offset, + int count) { + client.zrevrangeByScore(key, max, min, offset, count); + } + + public void zrevrangeByScoreWithScores(String key, double max, double min) { + client.zrevrangeByScoreWithScores(key, max, min); + } + + public void zrevrangeByScoreWithScores(String key, double max, double min, + int offset, int count) { + client.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + public void zrangeWithScores(String key, int start, int end) { client.zrangeWithScores(key, start, end); } diff --git a/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java index a5a302e..aa1a88e 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java @@ -483,6 +483,47 @@ public class SortedSetCommandsTest extends JedisCommandTestBase { expected.add("b"); assertEquals(expected, range); + + range = jedis.zrevrangeByScore("foo", "+inf", "(4"); + expected = new LinkedHashSet(); + expected.add("e"); + + assertEquals(expected, range); + + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); + + Set brange = jedis.zrevrangeByScore(bfoo, 2d, 0d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); + + assertEquals(bexpected, brange); + + brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(ba); + + assertEquals(bexpected, brange); + + Set brange2 = jedis.zrevrangeByScore(bfoo, SafeEncoder + .encode("+inf"), SafeEncoder.encode("(2")); + + bexpected = new LinkedHashSet(); + bexpected.add(bb); + + assertEquals(bexpected, brange2); + + brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 1, 1); + bexpected = new LinkedHashSet(); + bexpected.add(bc); + + assertEquals(bexpected, brange); } @Test @@ -579,6 +620,34 @@ public class SortedSetCommandsTest extends JedisCommandTestBase { expected.add(new Tuple("b", 2.0d)); assertEquals(expected, range); + + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); + + Set brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 1, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + + assertEquals(bexpected, brange); } @Test