From 8aca0b77f92ecad3e1832362bafee208a2941120 Mon Sep 17 00:00:00 2001 From: ivowiblo Date: Wed, 18 Apr 2012 15:22:43 -0400 Subject: [PATCH] Variadic commands --- .../redis/clients/jedis/BinaryClient.java | 50 ++++++++++++++----- .../java/redis/clients/jedis/BinaryJedis.java | 42 +++++++++------- .../clients/jedis/BinaryJedisCommands.java | 14 +++--- .../clients/jedis/BinaryShardedJedis.java | 29 ++++++----- src/main/java/redis/clients/jedis/Client.java | 34 ++++++++----- .../java/redis/clients/jedis/Commands.java | 14 +++--- src/main/java/redis/clients/jedis/Jedis.java | 42 +++++++++------- .../redis/clients/jedis/JedisCommands.java | 14 +++--- .../redis/clients/jedis/ShardedJedis.java | 29 ++++++----- .../java/redis/clients/util/SafeEncoder.java | 10 ++++ 10 files changed, 176 insertions(+), 102 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 812defe31b..f258676669 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -9,6 +9,7 @@ import static redis.clients.jedis.Protocol.Keyword.WITHSCORES; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -44,6 +45,15 @@ public BinaryClient(final String host) { public BinaryClient(final String host, final int port) { super(host, port); } + + private byte[][] joinParameters(byte[] first, byte[][] rest){ + byte[][] result = new byte[rest.length+1][]; + result[0] = first; + for(int i=0;i scoreMembers) { + ArrayList args = new ArrayList(scoreMembers.size() * 2 + 1); + + args.add(key); + + for(Map.Entry entry : scoreMembers.entrySet()){ + args.add(toByteArray(entry.getKey())); + args.add(entry.getValue()); + } + + byte[][] argsArray = new byte[args.size()][]; + args.toArray(argsArray); + + sendCommand(ZADD, argsArray); + } + public void zrange(final byte[] key, final int start, final int end) { sendCommand(ZRANGE, key, toByteArray(start), toByteArray(end)); } - public void zrem(final byte[] key, final byte[] member) { - sendCommand(ZREM, key, member); + public void zrem(final byte[] key, final byte[]... members) { + sendCommand(ZREM, joinParameters( key, members)); } public void zincrby(final byte[] key, final double score, diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 7b4cd30fd9..1c19306ab2 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -796,13 +796,13 @@ public Boolean hexists(final byte[] key, final byte[] field) { * Time complexity: O(1) * * @param key - * @param field + * @param fields * @return If the field was present in the hash it is deleted and 1 is * returned, otherwise 0 is returned and no operation is performed. */ - public Long hdel(final byte[] key, final byte[] field) { + public Long hdel(final byte[] key, final byte[]... fields) { checkIsInMulti(); - client.hdel(key, field); + client.hdel(key, fields); return client.getIntegerReply(); } @@ -881,16 +881,16 @@ public Map hgetAll(final byte[] key) { *

* Time complexity: O(1) * - * @see BinaryJedis#lpush(byte[], byte[]) + * @see BinaryJedis#rpush(byte[], byte[]...) * * @param key - * @param string + * @param strings * @return Integer reply, specifically, the number of elements inside the * list after the push operation. */ - public Long rpush(final byte[] key, final byte[] string) { + public Long rpush(final byte[] key, final byte[]... strings) { checkIsInMulti(); - client.rpush(key, string); + client.rpush(key, strings); return client.getIntegerReply(); } @@ -902,16 +902,16 @@ public Long rpush(final byte[] key, final byte[] string) { *

* Time complexity: O(1) * - * @see BinaryJedis#rpush(byte[], byte[]) + * @see BinaryJedis#rpush(byte[], byte[]...) * * @param key - * @param string + * @param strings * @return Integer reply, specifically, the number of elements inside the * list after the push operation. */ - public Long lpush(final byte[] key, final byte[] string) { + public Long lpush(final byte[] key, final byte[]... strings) { checkIsInMulti(); - client.lpush(key, string); + client.lpush(key, strings); return client.getIntegerReply(); } @@ -1162,13 +1162,13 @@ public byte[] rpoplpush(final byte[] srckey, final byte[] dstkey) { * Time complexity O(1) * * @param key - * @param member + * @param members * @return Integer reply, specifically: 1 if the new element was added 0 if * the element was already a member of the set */ - public Long sadd(final byte[] key, final byte[] member) { + public Long sadd(final byte[] key, final byte[]... members) { checkIsInMulti(); - client.sadd(key, member); + client.sadd(key, members); return client.getIntegerReply(); } @@ -1200,7 +1200,7 @@ public Set smembers(final byte[] key) { * @return Integer reply, specifically: 1 if the new element was removed 0 * if the new element was not a member of the set */ - public Long srem(final byte[] key, final byte[] member) { + public Long srem(final byte[] key, final byte[]... member) { checkIsInMulti(); client.srem(key, member); return client.getIntegerReply(); @@ -1458,6 +1458,12 @@ public Long zadd(final byte[] key, final double score, final byte[] member) { client.zadd(key, score, member); return client.getIntegerReply(); } + + public Long zadd(final byte[] key, final Map scoreMembers) { + checkIsInMulti(); + client.zaddBinary(key, scoreMembers); + return client.getIntegerReply(); + } public Set zrange(final byte[] key, final int start, final int end) { checkIsInMulti(); @@ -1477,13 +1483,13 @@ public Set zrange(final byte[] key, final int start, final int end) { * * * @param key - * @param member + * @param members * @return Integer reply, specifically: 1 if the new element was removed 0 * if the new element was not a member of the set */ - public Long zrem(final byte[] key, final byte[] member) { + public Long zrem(final byte[] key, final byte[]... members) { checkIsInMulti(); - client.zrem(key, member); + client.zrem(key, members); return client.getIntegerReply(); } diff --git a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java index ef8aebd1e8..7040e53511 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java @@ -57,7 +57,7 @@ public interface BinaryJedisCommands { Boolean hexists(byte[] key, byte[] field); - Long hdel(byte[] key, byte[] field); + Long hdel(byte[] key, byte[]... field); Long hlen(byte[] key); @@ -67,9 +67,9 @@ public interface BinaryJedisCommands { Map hgetAll(byte[] key); - Long rpush(byte[] key, byte[] string); + Long rpush(byte[] key, byte[]... string); - Long lpush(byte[] key, byte[] string); + Long lpush(byte[] key, byte[]... string); Long llen(byte[] key); @@ -87,11 +87,11 @@ public interface BinaryJedisCommands { byte[] rpop(byte[] key); - Long sadd(byte[] key, byte[] member); + Long sadd(byte[] key, byte[]... member); Set smembers(byte[] key); - Long srem(byte[] key, byte[] member); + Long srem(byte[] key, byte[]... member); byte[] spop(byte[] key); @@ -102,10 +102,12 @@ public interface BinaryJedisCommands { byte[] srandmember(byte[] key); Long zadd(byte[] key, double score, byte[] member); + + Long zadd(byte[] key, Map scoreMembers); Set zrange(byte[] key, int start, int end); - Long zrem(byte[] key, byte[] member); + Long zrem(byte[] key, byte[]... member); Double zincrby(byte[] key, double score, byte[] member); diff --git a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java index 9c1abd2832..01b14b0fee 100644 --- a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java @@ -155,9 +155,9 @@ public Boolean hexists(byte[] key, byte[] field) { return j.hexists(key, field); } - public Long hdel(byte[] key, byte[] field) { + public Long hdel(byte[] key, byte[]... fields) { Jedis j = getShard(key); - return j.hdel(key, field); + return j.hdel(key, fields); } public Long hlen(byte[] key) { @@ -180,14 +180,14 @@ public Map hgetAll(byte[] key) { return j.hgetAll(key); } - public Long rpush(byte[] key, byte[] string) { + public Long rpush(byte[] key, byte[]... strings) { Jedis j = getShard(key); - return j.rpush(key, string); + return j.rpush(key, strings); } - public Long lpush(byte[] key, byte[] string) { + public Long lpush(byte[] key, byte[]... strings) { Jedis j = getShard(key); - return j.lpush(key, string); + return j.lpush(key, strings); } public Long llen(byte[] key) { @@ -230,9 +230,9 @@ public byte[] rpop(byte[] key) { return j.rpop(key); } - public Long sadd(byte[] key, byte[] member) { + public Long sadd(byte[] key, byte[]... members) { Jedis j = getShard(key); - return j.sadd(key, member); + return j.sadd(key, members); } public Set smembers(byte[] key) { @@ -240,9 +240,9 @@ public Set smembers(byte[] key) { return j.smembers(key); } - public Long srem(byte[] key, byte[] member) { + public Long srem(byte[] key, byte[]... members) { Jedis j = getShard(key); - return j.srem(key, member); + return j.srem(key, members); } public byte[] spop(byte[] key) { @@ -269,15 +269,20 @@ public Long zadd(byte[] key, double score, byte[] member) { Jedis j = getShard(key); return j.zadd(key, score, member); } + + public Long zadd(byte[] key, Map scoreMembers) { + Jedis j = getShard(key); + return j.zadd(key, scoreMembers); + } public Set zrange(byte[] key, int start, int end) { Jedis j = getShard(key); return j.zrange(key, start, end); } - public Long zrem(byte[] key, byte[] member) { + public Long zrem(byte[] key, byte[]... members) { Jedis j = getShard(key); - return j.zrem(key, member); + return j.zrem(key, members); } public Double zincrby(byte[] key, double score, byte[] member) { diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index 1f493e03c4..9c1e43d8d9 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -169,8 +169,8 @@ public void hexists(final String key, final String field) { hexists(SafeEncoder.encode(key), SafeEncoder.encode(field)); } - public void hdel(final String key, final String field) { - hdel(SafeEncoder.encode(key), SafeEncoder.encode(field)); + public void hdel(final String key, final String... fields) { + hdel(SafeEncoder.encode(key), SafeEncoder.encodeMany(fields)); } public void hlen(final String key) { @@ -189,12 +189,12 @@ public void hgetAll(final String key) { hgetAll(SafeEncoder.encode(key)); } - public void rpush(final String key, final String string) { - rpush(SafeEncoder.encode(key), SafeEncoder.encode(string)); + public void rpush(final String key, final String... string) { + rpush(SafeEncoder.encode(key), SafeEncoder.encodeMany(string)); } - public void lpush(final String key, final String string) { - lpush(SafeEncoder.encode(key), SafeEncoder.encode(string)); + public void lpush(final String key, final String... string) { + lpush(SafeEncoder.encode(key), SafeEncoder.encodeMany(string)); } public void llen(final String key) { @@ -233,16 +233,16 @@ public void rpoplpush(final String srckey, final String dstkey) { rpoplpush(SafeEncoder.encode(srckey), SafeEncoder.encode(dstkey)); } - public void sadd(final String key, final String member) { - sadd(SafeEncoder.encode(key), SafeEncoder.encode(member)); + public void sadd(final String key, final String... members) { + sadd(SafeEncoder.encode(key), SafeEncoder.encodeMany(members)); } public void smembers(final String key) { smembers(SafeEncoder.encode(key)); } - public void srem(final String key, final String member) { - srem(SafeEncoder.encode(key), SafeEncoder.encode(member)); + public void srem(final String key, final String... members) { + srem(SafeEncoder.encode(key), SafeEncoder.encodeMany(members)); } public void spop(final String key) { @@ -323,8 +323,8 @@ public void zrange(final String key, final int start, final int end) { zrange(SafeEncoder.encode(key), start, end); } - public void zrem(final String key, final String member) { - zrem(SafeEncoder.encode(key), SafeEncoder.encode(member)); + public void zrem(final String key, final String... members) { + zrem(SafeEncoder.encode(key), SafeEncoder.encodeMany(members)); } public void zincrby(final String key, final double score, @@ -595,4 +595,14 @@ public void configSet(String parameter, String value) { public void configGet(String pattern) { configGet(SafeEncoder.encode(pattern)); } + + public void zadd(String key, Map scoreMembers) { + HashMap binaryScoreMembers = new HashMap(); + + for(Map.Entry entry : scoreMembers.entrySet()){ + binaryScoreMembers.put(entry.getKey(), SafeEncoder.encode(entry.getValue())); + } + + zaddBinary(SafeEncoder.encode(key), binaryScoreMembers); + } } diff --git a/src/main/java/redis/clients/jedis/Commands.java b/src/main/java/redis/clients/jedis/Commands.java index 235ee88b7d..58be5852fc 100644 --- a/src/main/java/redis/clients/jedis/Commands.java +++ b/src/main/java/redis/clients/jedis/Commands.java @@ -76,7 +76,7 @@ public interface Commands { public void hexists(final String key, final String field); - public void hdel(final String key, final String field); + public void hdel(final String key, final String... fields); public void hlen(final String key); @@ -86,9 +86,9 @@ public interface Commands { public void hgetAll(final String key); - public void rpush(final String key, final String string); + public void rpush(final String key, final String... strings); - public void lpush(final String key, final String string); + public void lpush(final String key, final String... strings); public void llen(final String key); @@ -108,11 +108,11 @@ public interface Commands { public void rpoplpush(final String srckey, final String dstkey); - public void sadd(final String key, final String member); + public void sadd(final String key, final String... members); public void smembers(final String key); - public void srem(final String key, final String member); + public void srem(final String key, final String... member); public void spop(final String key); @@ -139,9 +139,11 @@ public void smove(final String srckey, final String dstkey, public void zadd(final String key, final double score, final String member); + public void zadd(final String key, final Map scoreMembers); + public void zrange(final String key, final int start, final int end); - public void zrem(final String key, final String member); + public void zrem(final String key, final String... members); public void zincrby(final String key, final double score, final String member); diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index c71d9aab9f..f4fdb99592 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -779,13 +779,13 @@ public Boolean hexists(final String key, final String field) { * Time complexity: O(1) * * @param key - * @param field + * @param fields * @return If the field was present in the hash it is deleted and 1 is * returned, otherwise 0 is returned and no operation is performed. */ - public Long hdel(final String key, final String field) { + public Long hdel(final String key, final String... fields) { checkIsInMulti(); - client.hdel(key, field); + client.hdel(key, fields); return client.getIntegerReply(); } @@ -861,13 +861,13 @@ public Map hgetAll(final String key) { * @see Jedis#lpush(String, String) * * @param key - * @param string + * @param strings * @return Integer reply, specifically, the number of elements inside the * list after the push operation. */ - public Long rpush(final String key, final String string) { + public Long rpush(final String key, final String... strings) { checkIsInMulti(); - client.rpush(key, string); + client.rpush(key, strings); return client.getIntegerReply(); } @@ -882,13 +882,13 @@ public Long rpush(final String key, final String string) { * @see Jedis#rpush(String, String) * * @param key - * @param string + * @param strings * @return Integer reply, specifically, the number of elements inside the * list after the push operation. */ - public Long lpush(final String key, final String string) { + public Long lpush(final String key, final String... strings) { checkIsInMulti(); - client.lpush(key, string); + client.lpush(key, strings); return client.getIntegerReply(); } @@ -1139,13 +1139,13 @@ public String rpoplpush(final String srckey, final String dstkey) { * Time complexity O(1) * * @param key - * @param member + * @param members * @return Integer reply, specifically: 1 if the new element was added 0 if * the element was already a member of the set */ - public Long sadd(final String key, final String member) { + public Long sadd(final String key, final String... members) { checkIsInMulti(); - client.sadd(key, member); + client.sadd(key, members); return client.getIntegerReply(); } @@ -1173,13 +1173,13 @@ public Set smembers(final String key) { * Time complexity O(1) * * @param key - * @param member + * @param members * @return Integer reply, specifically: 1 if the new element was removed 0 * if the new element was not a member of the set */ - public Long srem(final String key, final String member) { + public Long srem(final String key, final String... members) { checkIsInMulti(); - client.srem(key, member); + client.srem(key, members); return client.getIntegerReply(); } @@ -1435,6 +1435,12 @@ public Long zadd(final String key, final double score, final String member) { client.zadd(key, score, member); return client.getIntegerReply(); } + + public Long zadd(final String key, final Map scoreMembers) { + checkIsInMulti(); + client.zadd(key, scoreMembers); + return client.getIntegerReply(); + } public Set zrange(final String key, final int start, final int end) { checkIsInMulti(); @@ -1454,13 +1460,13 @@ public Set zrange(final String key, final int start, final int end) { * * * @param key - * @param member + * @param members * @return Integer reply, specifically: 1 if the new element was removed 0 * if the new element was not a member of the set */ - public Long zrem(final String key, final String member) { + public Long zrem(final String key, final String... members) { checkIsInMulti(); - client.zrem(key, member); + client.zrem(key, members); return client.getIntegerReply(); } diff --git a/src/main/java/redis/clients/jedis/JedisCommands.java b/src/main/java/redis/clients/jedis/JedisCommands.java index 603b60c076..4e66e39939 100644 --- a/src/main/java/redis/clients/jedis/JedisCommands.java +++ b/src/main/java/redis/clients/jedis/JedisCommands.java @@ -62,7 +62,7 @@ public interface JedisCommands { Boolean hexists(String key, String field); - Long hdel(String key, String field); + Long hdel(String key, String... field); Long hlen(String key); @@ -72,9 +72,9 @@ public interface JedisCommands { Map hgetAll(String key); - Long rpush(String key, String string); + Long rpush(String key, String... string); - Long lpush(String key, String string); + Long lpush(String key, String... string); Long llen(String key); @@ -92,11 +92,11 @@ public interface JedisCommands { String rpop(String key); - Long sadd(String key, String member); + Long sadd(String key, String... member); Set smembers(String key); - Long srem(String key, String member); + Long srem(String key, String... member); String spop(String key); @@ -107,10 +107,12 @@ public interface JedisCommands { String srandmember(String key); Long zadd(String key, double score, String member); + + Long zadd(String key, Map scoreMembers); Set zrange(String key, int start, int end); - Long zrem(String key, String member); + Long zrem(String key, String... member); Double zincrby(String key, double score, String member); diff --git a/src/main/java/redis/clients/jedis/ShardedJedis.java b/src/main/java/redis/clients/jedis/ShardedJedis.java index b294149240..c646b29d5f 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedis.java +++ b/src/main/java/redis/clients/jedis/ShardedJedis.java @@ -173,9 +173,9 @@ public Long del(String key) { return j.del(key); } - public Long hdel(String key, String field) { + public Long hdel(String key, String... fields) { Jedis j = getShard(key); - return j.hdel(key, field); + return j.hdel(key, fields); } public Long hlen(String key) { @@ -198,14 +198,14 @@ public Map hgetAll(String key) { return j.hgetAll(key); } - public Long rpush(String key, String string) { + public Long rpush(String key, String... strings) { Jedis j = getShard(key); - return j.rpush(key, string); + return j.rpush(key, strings); } - public Long lpush(String key, String string) { + public Long lpush(String key, String... strings) { Jedis j = getShard(key); - return j.lpush(key, string); + return j.lpush(key, strings); } public Long llen(String key) { @@ -248,9 +248,9 @@ public String rpop(String key) { return j.rpop(key); } - public Long sadd(String key, String member) { + public Long sadd(String key, String... members) { Jedis j = getShard(key); - return j.sadd(key, member); + return j.sadd(key, members); } public Set smembers(String key) { @@ -258,9 +258,9 @@ public Set smembers(String key) { return j.smembers(key); } - public Long srem(String key, String member) { + public Long srem(String key, String... members) { Jedis j = getShard(key); - return j.srem(key, member); + return j.srem(key, members); } public String spop(String key) { @@ -287,15 +287,20 @@ public Long zadd(String key, double score, String member) { Jedis j = getShard(key); return j.zadd(key, score, member); } + + public Long zadd(String key, Map scoreMembers) { + Jedis j = getShard(key); + return j.zadd(key, scoreMembers); + } public Set zrange(String key, int start, int end) { Jedis j = getShard(key); return j.zrange(key, start, end); } - public Long zrem(String key, String member) { + public Long zrem(String key, String... members) { Jedis j = getShard(key); - return j.zrem(key, member); + return j.zrem(key, members); } public Double zincrby(String key, double score, String member) { diff --git a/src/main/java/redis/clients/util/SafeEncoder.java b/src/main/java/redis/clients/util/SafeEncoder.java index 8e88c40e63..d63fe0bfa9 100644 --- a/src/main/java/redis/clients/util/SafeEncoder.java +++ b/src/main/java/redis/clients/util/SafeEncoder.java @@ -1,6 +1,8 @@ package redis.clients.util; import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; import redis.clients.jedis.Protocol; import redis.clients.jedis.exceptions.JedisDataException; @@ -11,6 +13,14 @@ * */ public class SafeEncoder { + public static byte[][] encodeMany(final String... strs){ + byte[][] many = new byte[strs.length][]; + for(int i=0;i