diff --git a/.gitignore b/.gitignore index d77754e..982e6b6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ target/ build/ bin/ +tags diff --git a/Makefile b/Makefile index 0e31379..00f29bf 100644 --- a/Makefile +++ b/Makefile @@ -12,15 +12,31 @@ requirepass foobared pidfile /tmp/redis2.pid endef + +define REDIS_SENTINEL1 +port 26379 +daemonize yes +sentinel monitor mymaster 127.0.0.1 6379 2 +sentinel auth-pass mymaster foobared +sentinel down-after-milliseconds mymaster 5000 +sentinel failover-timeout mymaster 900000 +sentinel can-failover mymaster yes +sentinel parallel-syncs mymaster 1 +pidfile /tmp/sentinel1.pid +endef + export REDIS1_CONF export REDIS2_CONF +export REDIS_SENTINEL1 test: echo "$$REDIS1_CONF" | redis-server - echo "$$REDIS2_CONF" | redis-server - + echo "$$REDIS_SENTINEL1" | redis-sentinel - mvn clean compile test kill `cat /tmp/redis1.pid` kill `cat /tmp/redis2.pid` + kill `cat /tmp/sentinel1.pid` .PHONY: test diff --git a/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java b/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java new file mode 100644 index 0000000..51b4879 --- /dev/null +++ b/src/main/java/redis/clients/jedis/AdvancedBinaryJedisCommands.java @@ -0,0 +1,25 @@ +package redis.clients.jedis; + + +import java.util.List; + +public interface AdvancedBinaryJedisCommands { + + List configGet(byte[] pattern); + + byte[] configSet(byte[] parameter, byte[] value); + + String slowlogReset(); + + Long slowlogLen(); + + List slowlogGetBinary(); + + List slowlogGetBinary(long entries); + + Long objectRefcount(byte[] key); + + byte[] objectEncoding(byte[] key); + + Long objectIdletime(byte[] key); +} diff --git a/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java b/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java new file mode 100644 index 0000000..5ed50eb --- /dev/null +++ b/src/main/java/redis/clients/jedis/AdvancedJedisCommands.java @@ -0,0 +1,26 @@ +package redis.clients.jedis; + +import redis.clients.util.Slowlog; + +import java.util.List; + + +public interface AdvancedJedisCommands { + List configGet(String pattern); + + String configSet(String parameter, String value); + + String slowlogReset(); + + Long slowlogLen(); + + List slowlogGet(); + + List slowlogGet(long entries); + + Long objectRefcount(String string); + + String objectEncoding(String string); + + Long objectIdletime(String string); +} diff --git a/src/main/java/redis/clients/jedis/BasicCommands.java b/src/main/java/redis/clients/jedis/BasicCommands.java new file mode 100644 index 0000000..482d43b --- /dev/null +++ b/src/main/java/redis/clients/jedis/BasicCommands.java @@ -0,0 +1,42 @@ +package redis.clients.jedis; + +public interface BasicCommands { + + String ping(); + + String quit(); + + String flushDB(); + + Long dbSize(); + + String select(int index); + + String flushAll(); + + String auth(String password); + + String save(); + + String bgsave(); + + String bgrewriteaof(); + + Long lastsave(); + + String shutdown(); + + String info(); + + String info(String section); + + String slaveof(String host, int port); + + String slaveofNoOne(); + + Long getDB(); + + String debug(DebugParams params); + + String configResetStat(); +} diff --git a/src/main/java/redis/clients/jedis/BasicRedisPipeline.java b/src/main/java/redis/clients/jedis/BasicRedisPipeline.java new file mode 100644 index 0000000..97658d8 --- /dev/null +++ b/src/main/java/redis/clients/jedis/BasicRedisPipeline.java @@ -0,0 +1,38 @@ +package redis.clients.jedis; + + +import java.util.List; + +/** + * Pipelined responses for all of the low level, non key related commands + */ +public interface BasicRedisPipeline { + + Response bgrewriteaof(); + + Response bgsave(); + + Response configGet(String pattern); + + Response configSet(String parameter, String value); + + Response configResetStat(); + + Response save(); + + Response lastsave(); + + Response flushDB(); + + Response flushAll(); + + Response info(); + + Response dbSize(); + + Response shutdown(); + + Response ping(); + + Response select(int index); +} diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 56be470..ab5bd8d 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -79,7 +79,7 @@ public class BinaryClient extends Connection { } public void ping() { - sendCommand(PING); + sendCommand(Command.PING); } public void set(final byte[] key, final byte[] value) { @@ -656,6 +656,10 @@ public class BinaryClient extends Connection { public void info() { sendCommand(INFO); } + + public void info(final String section) { + sendCommand(INFO, section); + } public void monitor() { sendCommand(MONITOR); @@ -685,16 +689,16 @@ public class BinaryClient extends Connection { sendCommand(SYNC); } - public void lpushx(final byte[] key, final byte[] string) { - sendCommand(LPUSHX, key, string); + public void lpushx(final byte[] key, final byte[]... string) { + sendCommand(LPUSHX, joinParameters(key, string)); } public void persist(final byte[] key) { sendCommand(PERSIST, key); } - public void rpushx(final byte[] key, final byte[] string) { - sendCommand(RPUSHX, key, string); + public void rpushx(final byte[] key, final byte[]... string) { + sendCommand(RPUSHX, joinParameters(key, string)); } public void echo(final byte[] string) { @@ -723,6 +727,10 @@ public class BinaryClient extends Connection { sendCommand(SETBIT, key, toByteArray(offset), value); } + public void setbit(byte[] key, long offset, boolean value) { + sendCommand(SETBIT, key, toByteArray(offset), toByteArray(value)); + } + public void getbit(byte[] key, long offset) { sendCommand(GETBIT, key, toByteArray(offset)); } @@ -763,10 +771,18 @@ public class BinaryClient extends Connection { sendEvalCommand(EVAL, script, keyCount, params); } - public void evalsha(byte[] sha1, byte[] keyCount, byte[][] params) { + public void eval(byte[] script, int keyCount, byte[]... params) { + eval(script, toByteArray(keyCount), params); + } + + public void evalsha(byte[] sha1, byte[] keyCount, byte[]... params) { sendEvalCommand(EVALSHA, sha1, keyCount, params); } + public void evalsha(byte[] sha1, int keyCount, byte[]... params) { + sendEvalCommand(EVALSHA, sha1, toByteArray(keyCount), params); + } + public void scriptFlush() { sendCommand(SCRIPT, Keyword.FLUSH.raw); } @@ -815,4 +831,45 @@ public class BinaryClient extends Connection { public void objectEncoding(byte[] key) { sendCommand(OBJECT, ENCODING.raw, key); } + + public void bitcount(byte[] key) { + sendCommand(BITCOUNT, key); + } + + public void bitcount(byte[] key, long start, long end) { + sendCommand(BITCOUNT, key, toByteArray(start), toByteArray(end)); + } + + public void bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { + Keyword kw = Keyword.AND; + int len = srcKeys.length; + switch (op) { + case AND: + kw = Keyword.AND; + break; + case OR: + kw = Keyword.OR; + break; + case XOR: + kw = Keyword.XOR; + break; + case NOT: + kw = Keyword.NOT; + len = Math.min(1, len); + break; + } + + byte[][] bargs = new byte[len + 2][]; + bargs[0] = kw.raw; + bargs[1] = destKey; + for (int i = 0; i < len; ++i) { + bargs[i + 2] = srcKeys[i]; + } + + sendCommand(BITOP, bargs); + } + + public void sentinel(final byte[]... args) { + sendCommand(SENTINEL, args); + } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index c959f47..c72d769 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -17,7 +17,7 @@ import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.JedisByteHashMap; import redis.clients.util.SafeEncoder; -public class BinaryJedis implements BinaryJedisCommands { +public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, BinaryScriptingCommands { protected Client client = null; public BinaryJedis(final String host) { @@ -135,6 +135,12 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getIntegerReply(); } + public Long del(final byte[] key) { + checkIsInMulti(); + client.del(key); + return client.getIntegerReply(); + } + /** * Return the type of the value stored at key in form of a string. The type * can be one of "none", "string", "list", "set". "none" is returned if the @@ -1045,7 +1051,7 @@ public class BinaryJedis implements BinaryJedisCommands { * @return Multi bulk reply, specifically a list of elements in the * specified range. */ - public List lrange(final byte[] key, final int start, final int end) { + public List lrange(final byte[] key, final long start, final long end) { checkIsInMulti(); client.lrange(key, start, end); return client.getBinaryMultiBulkReply(); @@ -1085,7 +1091,7 @@ public class BinaryJedis implements BinaryJedisCommands { * @param end * @return Status code reply */ - public String ltrim(final byte[] key, final int start, final int end) { + public String ltrim(final byte[] key, final long start, final long end) { checkIsInMulti(); client.ltrim(key, start, end); return client.getStatusCodeReply(); @@ -1109,7 +1115,7 @@ public class BinaryJedis implements BinaryJedisCommands { * @param index * @return Bulk reply, specifically the requested element */ - public byte[] lindex(final byte[] key, final int index) { + public byte[] lindex(final byte[] key, final long index) { checkIsInMulti(); client.lindex(key, index); return client.getBinaryBulkReply(); @@ -1136,7 +1142,7 @@ public class BinaryJedis implements BinaryJedisCommands { * @param value * @return Status code reply */ - public String lset(final byte[] key, final int index, final byte[] value) { + public String lset(final byte[] key, final long index, final byte[] value) { checkIsInMulti(); client.lset(key, index, value); return client.getStatusCodeReply(); @@ -1161,7 +1167,7 @@ public class BinaryJedis implements BinaryJedisCommands { * @return Integer Reply, specifically: The number of removed elements if * the operation succeeded */ - public Long lrem(final byte[] key, final int count, final byte[] value) { + public Long lrem(final byte[] key, final long count, final byte[] value) { checkIsInMulti(); client.lrem(key, count, value); return client.getIntegerReply(); @@ -1541,7 +1547,7 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getIntegerReply(); } - public Set zrange(final byte[] key, final int start, final int end) { + public Set zrange(final byte[] key, final long start, final long end) { checkIsInMulti(); client.zrange(key, start, end); final List members = client.getBinaryMultiBulkReply(); @@ -1653,24 +1659,24 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getIntegerReply(); } - public Set zrevrange(final byte[] key, final int start, - final int end) { + public Set zrevrange(final byte[] key, final long start, + final long end) { checkIsInMulti(); client.zrevrange(key, start, end); final List members = client.getBinaryMultiBulkReply(); return new LinkedHashSet(members); } - public Set zrangeWithScores(final byte[] key, final int start, - final int end) { + public Set zrangeWithScores(final byte[] key, final long start, + final long end) { checkIsInMulti(); client.zrangeWithScores(key, start, end); Set set = getBinaryTupledSet(); return set; } - public Set zrevrangeWithScores(final byte[] key, final int start, - final int end) { + public Set zrevrangeWithScores(final byte[] key, final long start, + final long end) { checkIsInMulti(); client.zrevrangeWithScores(key, start, end); Set set = getBinaryTupledSet(); @@ -2076,6 +2082,46 @@ public class BinaryJedis implements BinaryJedisCommands { return multiBulkReply; } + public List blpop(byte[] arg) { + checkIsInMulti(); + byte[][] args = new byte[1][]; + args[0] = arg; + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List brpop(byte[] arg) { + checkIsInMulti(); + byte[][] args = new byte[1][]; + args[0] = arg; + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List blpop(byte[]... args) { + checkIsInMulti(); + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List brpop(byte[]... args) { + checkIsInMulti(); + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getBinaryMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + /** * Request for authentication in a password protected Redis server. A Redis * server can be instructed to require a password before to allow clients to @@ -2118,25 +2164,6 @@ public class BinaryJedis implements BinaryJedisCommands { return pipeline; } - public void subscribe(final JedisPubSub jedisPubSub, - final String... channels) { - client.setTimeoutInfinite(); - jedisPubSub.proceed(client, channels); - client.rollbackTimeout(); - } - - public Long publish(final String channel, final String message) { - client.publish(channel, message); - return client.getIntegerReply(); - } - - public void psubscribe(final JedisPubSub jedisPubSub, - final String... patterns) { - client.setTimeoutInfinite(); - jedisPubSub.proceedWithPatterns(client, patterns); - client.rollbackTimeout(); - } - public Long zcount(final byte[] key, final double min, final double max) { return zcount(key, toByteArray(min), toByteArray(max)); } @@ -2500,7 +2527,7 @@ public class BinaryJedis implements BinaryJedisCommands { * operation * */ - public Long zremrangeByRank(final byte[] key, final int start, final int end) { + public Long zremrangeByRank(final byte[] key, final long start, final long end) { checkIsInMulti(); client.zremrangeByRank(key, start, end); return client.getIntegerReply(); @@ -2854,6 +2881,11 @@ public class BinaryJedis implements BinaryJedisCommands { client.info(); return client.getBulkReply(); } + + public String info(final String section) { + client.info(section); + return client.getBulkReply(); + } /** * Dump all the received requests in real time. @@ -3008,7 +3040,7 @@ public class BinaryJedis implements BinaryJedisCommands { client.sync(); } - public Long lpushx(final byte[] key, final byte[] string) { + public Long lpushx(final byte[] key, final byte[]... string) { client.lpushx(key, string); return client.getIntegerReply(); } @@ -3028,7 +3060,7 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getIntegerReply(); } - public Long rpushx(final byte[] key, final byte[] string) { + public Long rpushx(final byte[] key, final byte[]... string) { client.rpushx(key, string); return client.getIntegerReply(); } @@ -3078,11 +3110,16 @@ public class BinaryJedis implements BinaryJedisCommands { * @param value * @return */ - public Boolean setbit(byte[] key, long offset, byte[] value) { + public Boolean setbit(byte[] key, long offset, boolean value) { client.setbit(key, offset, value); return client.getIntegerReply() == 1; } + public Boolean setbit(byte[] key, long offset, byte[] value) { + client.setbit(key, offset, value); + return client.getIntegerReply() == 1; + } + /** * Returns the bit value at offset in the string value stored at key * @@ -3100,9 +3137,9 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getIntegerReply(); } - public String getrange(byte[] key, long startOffset, long endOffset) { + public byte[] getrange(byte[] key, long startOffset, long endOffset) { client.getrange(key, startOffset, endOffset); - return client.getBulkReply(); + return client.getBinaryBulkReply(); } public Long publish(byte[] channel, byte[] message) { @@ -3152,20 +3189,50 @@ public class BinaryJedis implements BinaryJedisCommands { return params; } - public Object eval(byte[] script, byte[] keyCount, byte[][] params) { + public Object eval(byte[] script, byte[] keyCount, byte[]... params) { client.setTimeoutInfinite(); client.eval(script, keyCount, params); return client.getOne(); } - public byte[] scriptFlush() { + public Object eval(byte[] script, int keyCount, byte[]... params) { + client.setTimeoutInfinite(); + client.eval(script, SafeEncoder.encode(Integer.toString(keyCount)), params); + return client.getOne(); + } + + public Object eval(byte[] script) { + client.setTimeoutInfinite(); + client.eval(script, 0); + return client.getOne(); + } + + public Object evalsha(byte[] sha1) { + client.setTimeoutInfinite(); + client.evalsha(sha1, 0); + return client.getOne(); + } + + public Object evalsha(byte[] sha1, List keys, List args) { + client.setTimeoutInfinite(); + client.evalsha(sha1, keys.size(), keys.toArray(new byte[0][])); + return client.getOne(); + } + + public Object evalsha(byte[] sha1, int keyCount, byte[]... params) { + client.setTimeoutInfinite(); + client.evalsha(sha1, keyCount, params); + return client.getOne(); + } + + public String scriptFlush() { client.scriptFlush(); - return client.getBinaryBulkReply(); + return client.getStatusCodeReply(); } public List scriptExists(byte[]... sha1) { client.scriptExists(sha1); - return client.getIntegerMultiBulkReply(); + return client.getIntegerMultiBulkReply(); } public byte[] scriptLoad(byte[] script) { @@ -3173,17 +3240,17 @@ public class BinaryJedis implements BinaryJedisCommands { return client.getBinaryBulkReply(); } - public byte[] scriptKill() { + public String scriptKill() { client.scriptKill(); - return client.getBinaryBulkReply(); + return client.getStatusCodeReply(); } - public byte[] slowlogReset() { + public String slowlogReset() { client.slowlogReset(); - return client.getBinaryBulkReply(); + return client.getBulkReply(); } - public long slowlogLen() { + public Long slowlogLen() { client.slowlogLen(); return client.getIntegerReply(); } @@ -3212,4 +3279,19 @@ public class BinaryJedis implements BinaryJedisCommands { client.objectIdletime(key); return client.getIntegerReply(); } + + public Long bitcount(final byte[] key) { + client.bitcount(key); + return client.getIntegerReply(); + } + + public Long bitcount(final byte[] key, long start, long end) { + client.bitcount(key, start, end); + return client.getIntegerReply(); + } + + public Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys) { + client.bitop(op, destKey, srcKeys); + return client.getIntegerReply(); + } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java index 1a5f079..1c27847 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/BinaryJedisCommands.java @@ -17,6 +17,8 @@ public interface BinaryJedisCommands { Boolean exists(byte[] key); + Long persist(byte[] key); + String type(byte[] key); Long expire(byte[] key, int seconds); @@ -25,6 +27,16 @@ public interface BinaryJedisCommands { Long ttl(byte[] key); + Boolean setbit(byte[] key, long offset, boolean value); + + Boolean setbit(byte[] key, long offset, byte[] value); + + Boolean getbit(byte[] key, long offset); + + Long setrange(byte[] key, long offset, byte[] value); + + byte[] getrange(byte[] key, long startOffset, long endOffset); + byte[] getSet(byte[] key, byte[] value); Long setnx(byte[] key, byte[] value); @@ -71,21 +83,21 @@ public interface BinaryJedisCommands { Map hgetAll(byte[] key); - Long rpush(byte[] key, byte[]... string); + Long rpush(byte[] key, byte[]... args); - Long lpush(byte[] key, byte[]... string); + Long lpush(byte[] key, byte[]... args); Long llen(byte[] key); - List lrange(byte[] key, int start, int end); + List lrange(byte[] key, long start, long end); - String ltrim(byte[] key, int start, int end); + String ltrim(byte[] key, long start, long end); - byte[] lindex(byte[] key, int index); + byte[] lindex(byte[] key, long index); - String lset(byte[] key, int index, byte[] value); + String lset(byte[] key, long index, byte[] value); - Long lrem(byte[] key, int count, byte[] value); + Long lrem(byte[] key, long count, byte[] value); byte[] lpop(byte[] key); @@ -105,11 +117,13 @@ public interface BinaryJedisCommands { byte[] srandmember(byte[] key); - Long zadd(byte[] key, double score, byte[] member); + Long strlen(byte[] key); + Long zadd(byte[] key, double score, byte[] member); + Long zadd(byte[] key, Map scoreMembers); - Set zrange(byte[] key, int start, int end); + Set zrange(byte[] key, long start, long end); Long zrem(byte[] key, byte[]... member); @@ -119,11 +133,11 @@ public interface BinaryJedisCommands { Long zrevrank(byte[] key, byte[] member); - Set zrevrange(byte[] key, int start, int end); + Set zrevrange(byte[] key, long start, long end); - Set zrangeWithScores(byte[] key, int start, int end); + Set zrangeWithScores(byte[] key, long start, long end); - Set zrevrangeWithScores(byte[] key, int start, int end); + Set zrevrangeWithScores(byte[] key, long start, long end); Long zcard(byte[] key); @@ -139,54 +153,68 @@ public interface BinaryJedisCommands { Set zrangeByScore(byte[] key, double min, double max); - Set zrangeByScore(byte[] key, double min, double max, int offset, - int count); - - Set zrangeByScoreWithScores(byte[] key, double min, double max); - - Set zrangeByScoreWithScores(byte[] key, double min, double max, - int offset, int count); - - Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max); - - Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max, - int offset, int count); + Set zrangeByScore(byte[] key, byte[] min, byte[] max); Set zrevrangeByScore(byte[] key, double max, double min); - Set zrevrangeByScore(byte[] key, double max, double min, - int offset, int count); + Set zrangeByScore(byte[] key, double min, double max, int offset, + int count); Set zrevrangeByScore(byte[] key, byte[] max, byte[] min); - Set zrevrangeByScore(byte[] key, byte[] max, byte[] min, - int offset, int count); + Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, + int count); + + Set zrevrangeByScore(byte[] key, double max, double min, + int offset, int count); + + Set zrangeByScoreWithScores(byte[] key, double min, double max); Set zrevrangeByScoreWithScores(byte[] key, double max, double min); - Set zrevrangeByScoreWithScores(byte[] key, double max, double min, - int offset, int count); + Set zrangeByScoreWithScores(byte[] key, double min, double max, + int offset, int count); + + Set zrevrangeByScore(byte[] key, byte[] max, byte[] min, + int offset, int count); + Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max); + Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min); - Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min, - int offset, int count); + Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max, + int offset, int count); - Long zremrangeByRank(byte[] key, int start, int end); + Set zrevrangeByScoreWithScores(byte[] key, double max, double min, + int offset, int count); + + Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min, + int offset, int count); + + Long zremrangeByRank(byte[] key, long start, long end); Long zremrangeByScore(byte[] key, double start, double end); - + Long zremrangeByScore(byte[] key, byte[] start, byte[] end); - Long linsert(byte[] key, LIST_POSITION where, byte[] pivot, byte[] value); + Long linsert(byte[] key, Client.LIST_POSITION where, byte[] pivot, + byte[] value); + + Long lpushx(byte[] key, byte[]... arg); + + Long rpushx(byte[] key, byte[]... arg); - Long objectRefcount(byte[] key); + List blpop(byte[] arg); - Long objectIdletime(byte[] key); + List brpop(byte[] arg); - byte[] objectEncoding(byte[] key); + Long del(byte[] key); - Long lpushx(byte[] key, byte[] string); + byte[] echo(byte[] arg); - Long rpushx(byte[] key, byte[] string); + Long move(byte[] key, int dbIndex); + + Long bitcount(final byte[] key); + + Long bitcount(final byte[] key, long start, long end); } diff --git a/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java b/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java new file mode 100644 index 0000000..6f4fd90 --- /dev/null +++ b/src/main/java/redis/clients/jedis/BinaryRedisPipeline.java @@ -0,0 +1,219 @@ +package redis.clients.jedis; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author guy + */ +public interface BinaryRedisPipeline { + Response append(byte[] key, byte[] value); + + Response> blpop(byte[] arg); + + Response> brpop(byte[] arg); + + Response decr(byte[] key); + + Response decrBy(byte[] key, long integer); + + Response del(byte[] keys); + + Response echo(byte[] string); + + Response exists(byte[] key); + + Response expire(byte[] key, int seconds); + + Response expireAt(byte[] key, long unixTime); + + Response get(byte[] key); + + Response getbit(byte[] key, long offset); + + Response getSet(byte[] key, byte[] value); + + Response getrange(byte[] key, long startOffset, long endOffset); + + Response hdel(byte[] key, byte[] field); + + Response hexists(byte[] key, byte[] field); + + Response hget(byte[] key, byte[] field); + + Response> hgetAll(byte[] key); + + Response hincrBy(byte[] key, byte[] field, long value); + + Response> hkeys(byte[] key); + + Response hlen(byte[] key); + + Response> hmget(byte[] key, byte[]... fields); + + Response hmset(byte[] key, Map hash); + + Response hset(byte[] key, byte[] field, byte[] value); + + Response hsetnx(byte[] key, byte[] field, byte[] value); + + Response> hvals(byte[] key); + + Response incr(byte[] key); + + Response incrBy(byte[] key, long integer); + + Response lindex(byte[] key, int index); + + Response linsert(byte[] key, BinaryClient.LIST_POSITION where, + byte[] pivot, byte[] value); + + Response llen(byte[] key); + + Response lpop(byte[] key); + + Response lpush(byte[] key, byte[]... string); + + Response lpushx(byte[] key, byte[]... bytes); + + Response> lrange(byte[] key, long start, long end); + + Response lrem(byte[] key, long count, byte[] value); + + Response lset(byte[] key, long index, byte[] value); + + Response ltrim(byte[] key, long start, long end); + + Response move(byte[] key, int dbIndex); + + Response persist(byte[] key); + + Response rpop(byte[] key); + + Response rpush(byte[] key, byte[]... string); + + Response rpushx(byte[] key, byte[]... string); + + Response sadd(byte[] key, byte[]... member); + + Response scard(byte[] key); + + Response set(byte[] key, byte[] value); + + Response setbit(byte[] key, long offset, byte[] value); + + Response setrange(byte[] key, long offset, byte[] value); + + Response setex(byte[] key, int seconds, byte[] value); + + Response setnx(byte[] key, byte[] value); + + Response setrange(String key, long offset, String value); + + Response> smembers(byte[] key); + + Response sismember(byte[] key, byte[] member); + + Response> sort(byte[] key); + + Response> sort(byte[] key, + SortingParams sortingParameters); + + Response spop(byte[] key); + + Response srandmember(byte[] key); + + Response srem(byte[] key, byte[] member); + + Response strlen(byte[] key); + + Response substr(byte[] key, int start, int end); + + Response ttl(byte[] key); + + Response type(byte[] key); + + Response zadd(byte[] key, double score, byte[] member); + + Response zcard(byte[] key); + + Response zcount(byte[] key, double min, double max); + + Response zincrby(byte[] key, double score, byte[] member); + + Response> zrange(byte[] key, int start, int end); + + Response> zrangeByScore(byte[] key, double min, + double max); + + Response> zrangeByScore(byte[] key, byte[] min, + byte[] max); + + Response> zrangeByScore(byte[] key, double min, + double max, int offset, int count); + + Response> zrangeByScore(byte[] key, byte[] min, + byte[] max, int offset, int count); + + Response> zrangeByScoreWithScores(byte[] key, double min, + double max); + + Response> zrangeByScoreWithScores(byte[] key, byte[] min, + byte[] max); + + Response> zrangeByScoreWithScores(byte[] key, double min, + double max, int offset, int count); + + Response> zrangeByScoreWithScores(byte[] key, byte[] min, + byte[] max, int offset, int count); + + Response> zrevrangeByScore(byte[] key, double max, + double min); + + Response> zrevrangeByScore(byte[] key, byte[] max, + byte[] min); + + Response> zrevrangeByScore(byte[] key, double max, + double min, int offset, int count); + + Response> zrevrangeByScore(byte[] key, byte[] max, + byte[] min, int offset, int count); + + Response> zrevrangeByScoreWithScores(byte[] key, + double max, double min); + + Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min); + + Response> zrevrangeByScoreWithScores(byte[] key, + double max, double min, int offset, int count); + + Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min, int offset, int count); + + Response> zrangeWithScores(byte[] key, int start, int end); + + Response zrank(byte[] key, byte[] member); + + Response zrem(byte[] key, byte[] member); + + Response zremrangeByRank(byte[] key, int start, int end); + + Response zremrangeByScore(byte[] key, double start, double end); + + Response zremrangeByScore(byte[] key, byte[] start, byte[] end); + + Response> zrevrange(byte[] key, int start, int end); + + Response> zrevrangeWithScores(byte[] key, int start, + int end); + + Response zrevrank(byte[] key, byte[] member); + + Response zscore(byte[] key, byte[] member); + + Response bitcount(byte[] key); + + Response bitcount(byte[] key, long start, long end); +} diff --git a/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java b/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java new file mode 100644 index 0000000..092ce7a --- /dev/null +++ b/src/main/java/redis/clients/jedis/BinaryScriptingCommands.java @@ -0,0 +1,30 @@ +package redis.clients.jedis; + + +import java.util.List; + +public interface BinaryScriptingCommands { + + Object eval(byte[] script, byte[] keyCount, byte[]... params); + + Object eval(byte[] script, int keyCount, byte[]... params); + + Object eval(byte[] script, List keys, List args); + + Object eval(byte[] script); + + Object evalsha(byte[] script); + + Object evalsha(byte[] sha1, List keys, List args); + + Object evalsha(byte[] sha1, int keyCount, byte[]... params); + + // TODO: should be Boolean, add singular version + List scriptExists(byte[]... sha1); + + byte[] scriptLoad(byte[] script); + + String scriptFlush(); + + String scriptKill(); +} diff --git a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java index 1b6ad9a..fb882c8 100644 --- a/src/main/java/redis/clients/jedis/BinaryShardedJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryShardedJedis.java @@ -1,5 +1,9 @@ package redis.clients.jedis; +import redis.clients.jedis.BinaryClient.LIST_POSITION; +import redis.clients.util.Hashing; +import redis.clients.util.Sharded; + import java.io.IOException; import java.util.Collection; import java.util.List; @@ -7,10 +11,6 @@ import java.util.Map; import java.util.Set; import java.util.regex.Pattern; -import redis.clients.jedis.BinaryClient.LIST_POSITION; -import redis.clients.util.Hashing; -import redis.clients.util.Sharded; - public class BinaryShardedJedis extends Sharded implements BinaryJedisCommands { public BinaryShardedJedis(List shards) { @@ -30,10 +30,11 @@ public class BinaryShardedJedis extends Sharded super(shards, algo, keyTagPattern); } - public void disconnect() throws IOException { - for (Jedis jedis : getAllShards()) { - jedis.disconnect(); - } + public void disconnect() { + for (Jedis jedis : getAllShards()) { + jedis.quit(); + jedis.disconnect(); + } } protected Jedis create(JedisShardInfo shard) { @@ -205,13 +206,22 @@ public class BinaryShardedJedis extends Sharded return j.lpush(key, strings); } - public Long lpushx(byte[] key, byte[] string) { + public Long strlen(final byte[] key) { + Jedis j = getShard(key); + return j.strlen(key); + } + + public Long lpushx(byte[] key, byte[]... string) { Jedis j = getShard(key); return j.lpushx(key, string); } - - public Long rpushx(byte[] key, byte[] string) { + public Long persist(final byte[] key) { + Jedis j = getShard(key); + return j.persist(key); + } + + public Long rpushx(byte[] key, byte[]... string) { Jedis j = getShard(key); return j.rpushx(key, string); } @@ -221,27 +231,27 @@ public class BinaryShardedJedis extends Sharded return j.llen(key); } - public List lrange(byte[] key, int start, int end) { + public List lrange(byte[] key, long start, long end) { Jedis j = getShard(key); return j.lrange(key, start, end); } - public String ltrim(byte[] key, int start, int end) { + public String ltrim(byte[] key, long start, long end) { Jedis j = getShard(key); return j.ltrim(key, start, end); } - public byte[] lindex(byte[] key, int index) { + public byte[] lindex(byte[] key, long index) { Jedis j = getShard(key); return j.lindex(key, index); } - public String lset(byte[] key, int index, byte[] value) { + public String lset(byte[] key, long index, byte[] value) { Jedis j = getShard(key); return j.lset(key, index, value); } - public Long lrem(byte[] key, int count, byte[] value) { + public Long lrem(byte[] key, long count, byte[] value) { Jedis j = getShard(key); return j.lrem(key, count, value); } @@ -301,7 +311,7 @@ public class BinaryShardedJedis extends Sharded return j.zadd(key, scoreMembers); } - public Set zrange(byte[] key, int start, int end) { + public Set zrange(byte[] key, long start, long end) { Jedis j = getShard(key); return j.zrange(key, start, end); } @@ -326,17 +336,17 @@ public class BinaryShardedJedis extends Sharded return j.zrevrank(key, member); } - public Set zrevrange(byte[] key, int start, int end) { + public Set zrevrange(byte[] key, long start, long end) { Jedis j = getShard(key); return j.zrevrange(key, start, end); } - public Set zrangeWithScores(byte[] key, int start, int end) { + public Set zrangeWithScores(byte[] key, long start, long end) { Jedis j = getShard(key); return j.zrangeWithScores(key, start, end); } - public Set zrevrangeWithScores(byte[] key, int start, int end) { + public Set zrevrangeWithScores(byte[] key, long start, long end) { Jedis j = getShard(key); return j.zrevrangeWithScores(key, start, end); } @@ -392,7 +402,11 @@ public class BinaryShardedJedis extends Sharded Jedis j = getShard(key); return j.zrangeByScoreWithScores(key, min, max, offset, count); } - + + public Set zrangeByScore(byte[] key, byte[] min, byte[] max) { + Jedis j = getShard(key); + return j.zrangeByScore(key, min, max); + } public Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { Jedis j = getShard(key); @@ -405,6 +419,11 @@ public class BinaryShardedJedis extends Sharded return j.zrangeByScoreWithScores(key, min, max, offset, count); } + public Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, int count) { + Jedis j = getShard(key); + return j.zrangeByScore(key, min, max, offset, count); + } + public Set zrevrangeByScore(byte[] key, double max, double min) { Jedis j = getShard(key); return j.zrevrangeByScore(key, max, min); @@ -451,7 +470,7 @@ public class BinaryShardedJedis extends Sharded return j.zrevrangeByScoreWithScores(key, max, min, offset, count); } - public Long zremrangeByRank(byte[] key, int start, int end) { + public Long zremrangeByRank(byte[] key, long start, long end) { Jedis j = getShard(key); return j.zremrangeByRank(key, start, end); } @@ -499,4 +518,59 @@ public class BinaryShardedJedis extends Sharded Jedis j = getShard(key); return j.objectIdletime(key); } + + public Boolean setbit(byte[] key, long offset, boolean value) { + Jedis j = getShard(key); + return j.setbit(key, offset, value); + } + + public Boolean setbit(byte[] key, long offset, byte[] value) { + Jedis j = getShard(key); + return j.setbit(key, offset, value); + } + + public Boolean getbit(byte[] key, long offset) { + Jedis j = getShard(key); + return j.getbit(key, offset); + } + + public Long setrange(byte[] key, long offset, byte[] value) { + Jedis j = getShard(key); + return j.setrange(key, offset, value); + } + + public byte[] getrange(byte[] key, long startOffset, long endOffset) { + Jedis j = getShard(key); + return j.getrange(key, startOffset, endOffset); + } + + public Long move(byte[] key, int dbIndex) { + Jedis j = getShard(key); + return j.move(key, dbIndex); + } + + public byte[] echo(byte[] arg) { + Jedis j = getShard(arg); + return j.echo(arg); + } + + public List brpop(byte[] arg) { + Jedis j = getShard(arg); + return j.brpop(arg); + } + + public List blpop(byte[] arg) { + Jedis j = getShard(arg); + return j.blpop(arg); + } + + public Long bitcount(byte[] key) { + Jedis j = getShard(key); + return j.bitcount(key); + } + + public Long bitcount(byte[] key, long start, long end) { + Jedis j = getShard(key); + return j.bitcount(key, start, end); + } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/BinaryTransaction.java b/src/main/java/redis/clients/jedis/BinaryTransaction.java deleted file mode 100644 index 96bdf2b..0000000 --- a/src/main/java/redis/clients/jedis/BinaryTransaction.java +++ /dev/null @@ -1,675 +0,0 @@ -package redis.clients.jedis; - -import static redis.clients.jedis.Protocol.toByteArray; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import redis.clients.jedis.BinaryClient.LIST_POSITION; -import redis.clients.jedis.exceptions.JedisDataException; - -public class BinaryTransaction extends Queable { - protected Client client = null; - protected boolean inTransaction = true; - - public BinaryTransaction() { - } - - public BinaryTransaction(final Client client) { - this.client = client; - } - - public List exec() { - client.exec(); - client.getAll(1); // Discard all but the last reply - - List unformatted = client.getObjectMultiBulkReply(); - if (unformatted == null) { - return null; - } - List formatted = new ArrayList(); - for (Object o : unformatted) { - try{ - formatted.add(generateResponse(o).get()); - }catch(JedisDataException e){ - formatted.add(e); - } - } - return formatted; - } - - public List> execGetResponse() { - client.exec(); - client.getAll(1); // Discard all but the last reply - - List unformatted = client.getObjectMultiBulkReply(); - if (unformatted == null) { - return null; - } - List> response = new ArrayList>(); - for (Object o : unformatted) { - response.add(generateResponse(o)); - } - return response; - } - - public String discard() { - client.discard(); - client.getAll(1); // Discard all but the last reply - inTransaction = false; - clean(); - return client.getStatusCodeReply(); - } - - public Response append(byte[] key, byte[] value) { - client.append(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> blpop(byte[]... args) { - client.blpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> brpop(byte[]... args) { - client.brpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response decr(byte[] key) { - client.decr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response decrBy(byte[] key, long integer) { - client.decrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response del(byte[]... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); - } - - public Response echo(byte[] string) { - client.echo(string); - return getResponse(BuilderFactory.STRING); - } - - public Response exists(byte[] key) { - client.exists(key); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response expire(byte[] key, int seconds) { - client.expire(key, seconds); - return getResponse(BuilderFactory.LONG); - } - - public Response expireAt(byte[] key, long unixTime) { - client.expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); - } - - public Response get(byte[] key) { - client.get(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response getSet(byte[] key, byte[] value) { - client.getSet(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response hdel(byte[] key, byte[] field) { - client.hdel(key, field); - return getResponse(BuilderFactory.LONG); - } - - public Response hexists(byte[] key, byte[] field) { - client.hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response hget(byte[] key, byte[] field) { - client.hget(key, field); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response> hgetAll(byte[] key) { - client.hgetAll(key); - return getResponse(BuilderFactory.STRING_MAP); - } - - public Response hincrBy(byte[] key, byte[] field, long value) { - client.hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> hkeys(byte[] key) { - client.hkeys(key); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response hlen(byte[] key) { - client.hlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> hmget(byte[] key, byte[]... fields) { - client.hmget(key, fields); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response hmset(byte[] key, Map hash) { - client.hmset(key, hash); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response hset(byte[] key, byte[] field, byte[] value) { - client.hset(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hsetnx(byte[] key, byte[] field, byte[] value) { - client.hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> hvals(byte[] key) { - client.hvals(key); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response incr(byte[] key) { - client.incr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response incrBy(byte[] key, long integer) { - client.incrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response> keys(byte[] pattern) { - client.keys(pattern); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response lindex(byte[] key, long index) { - client.lindex(key, index); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response linsert(byte[] key, LIST_POSITION where, - byte[] pivot, byte[] value) { - client.linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); - } - - public Response llen(byte[] key) { - client.llen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response lpop(byte[] key) { - client.lpop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response lpush(byte[] key, byte[] string) { - client.lpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response lpushx(byte[] key, byte[] bytes) { - client.lpushx(key, bytes); - return getResponse(BuilderFactory.LONG); - } - - public Response> lrange(byte[] key, long start, long end) { - client.lrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response lrem(byte[] key, long count, byte[] value) { - client.lrem(key, count, value); - return getResponse(BuilderFactory.LONG); - } - - public Response lset(byte[] key, long index, byte[] value) { - client.lset(key, index, value); - return getResponse(BuilderFactory.STRING); - } - - public Response ltrim(byte[] key, long start, long end) { - client.ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> mget(byte[]... keys) { - client.mget(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response move(byte[] key, int dbIndex) { - client.move(key, dbIndex); - return getResponse(BuilderFactory.LONG); - } - - public Response mset(byte[]... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); - } - - public Response msetnx(byte[]... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); - } - - public Response persist(byte[] key) { - client.persist(key); - return getResponse(BuilderFactory.LONG); - } - - public Response rename(byte[] oldkey, byte[] newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); - } - - public Response renamenx(byte[] oldkey, byte[] newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); - } - - public Response rpop(byte[] key) { - client.rpop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response rpoplpush(byte[] srckey, byte[] dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response rpush(byte[] key, byte[] string) { - client.rpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response rpushx(byte[] key, byte[] string) { - client.rpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response sadd(byte[] key, byte[] member) { - client.sadd(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response scard(byte[] key) { - client.scard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> sdiff(byte[]... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response sdiffstore(byte[] dstkey, byte[]... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response set(byte[] key, byte[] value) { - client.set(key, value); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response setbit(String key, long offset, boolean value) { - client.setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response setex(byte[] key, int seconds, byte[] value) { - client.setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); - } - - public Response setnx(byte[] key, byte[] value) { - client.setnx(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> sinter(byte[]... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response sinterstore(byte[] dstkey, byte[]... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sismember(byte[] key, byte[] member) { - client.sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response> smembers(byte[] key) { - client.smembers(key); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response smove(byte[] srckey, byte[] dstkey, byte[] member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); - } - - public Response> sort(byte[] key) { - client.sort(key); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response> sort(byte[] key, - SortingParams sortingParameters) { - client.sort(key, sortingParameters); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response> sort(byte[] key, - SortingParams sortingParameters, byte[] dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response> sort(byte[] key, byte[] dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response spop(byte[] key) { - client.spop(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response srandmember(byte[] key) { - client.srandmember(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response srem(byte[] key, byte[] member) { - client.srem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response strlen(byte[] key) { - client.strlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response substr(byte[] key, int start, int end) { // what's - // that? - client.substr(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> sunion(byte[]... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response sunionstore(byte[] dstkey, byte[]... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response ttl(byte[] key) { - client.ttl(key); - return getResponse(BuilderFactory.LONG); - } - - public Response type(byte[] key) { - client.type(key); - return getResponse(BuilderFactory.STRING); - } - - public Response zadd(byte[] key, double score, byte[] member) { - client.zadd(key, score, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zcard(byte[] key) { - client.zcard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response zcount(byte[] key, double min, double max) { - return zcount(key, toByteArray(min), toByteArray(max)); - } - - public Response zcount(byte[] key, byte[] min, byte[] max) { - client.zcount(key, min, max); - return getResponse(BuilderFactory.LONG); - } - - public Response zincrby(byte[] key, double score, byte[] member) { - client.zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zinterstore(byte[] dstkey, byte[]... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zinterstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrange(byte[] key, int start, int end) { - client.zrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response> zrangeByScore(byte[] key, double min, - double max) { - return zrangeByScore(key, toByteArray(min), toByteArray(max)); - } - - public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max, int offset, int count) { - client.zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response> zrangeByScore(byte[] key, double min, - double max, int offset, int count) { - return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, count); - } - - public Response> zrangeByScoreWithScores(byte[] key, double min, - double max) { - return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); - } - - public Response> zrangeByScoreWithScores(byte[] key, double min, - double max, int offset, int count) { - return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count); - } - - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max) { - client.zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max, int offset, int count) { - client.zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response> zrangeWithScores(byte[] key, int start, int end) { - client.zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response zrank(byte[] key, byte[] member) { - client.zrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrem(byte[] key, byte[] member) { - client.zrem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByRank(byte[] key, int start, int end) { - client.zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(byte[] key, double start, double end) { - return zremrangeByScore(key, toByteArray(start), toByteArray(end)); - } - - public Response zremrangeByScore(byte[] key, byte[] start, byte[] end) { - client.zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrevrange(byte[] key, int start, int end) { - client.zrevrange(key, start, end); - return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); - } - - public Response> zrevrangeWithScores(byte[] key, int start, - int end) { - client.zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); - } - - public Response zrevrank(byte[] key, byte[] member) { - client.zrevrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zscore(byte[] key, byte[] member) { - client.zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zunionstore(byte[] dstkey, byte[]... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zunionstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response brpoplpush(byte[] source, byte[] destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response select(final int index) { - client.select(index); - return getResponse(BuilderFactory.STRING); - } - - public Response flushDB() { - client.flushDB(); - return getResponse(BuilderFactory.STRING); - } - - public Response flushAll() { - client.flushAll(); - return getResponse(BuilderFactory.STRING); - } - - public Response save() { - client.save(); - return getResponse(BuilderFactory.STRING); - } - - public Response info() { - client.info(); - return getResponse(BuilderFactory.STRING); - } - - public Response lastsave() { - client.lastsave(); - return getResponse(BuilderFactory.LONG); - } - - public Response dbSize() { - client.dbSize(); - return getResponse(BuilderFactory.LONG); - } - - public Response> configGet(final byte[] pattern) { - client.configGet(pattern); - return getResponse(BuilderFactory.BYTE_ARRAY_LIST); - } - - public Response configSet(final byte[] parameter, final byte[] value) { - client.configSet(parameter, value); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response configResetStat() { - client.configResetStat(); - return getResponse(BuilderFactory.STRING); - } - - public Response shutdown() { - client.shutdown(); - return getResponse(BuilderFactory.STRING); - } - - public Response getbit(final byte[] key, final long offset) { - client.getbit(key, offset); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response setbit(final byte[] key, final long offset, final byte[] value) { - client.setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response ping() { - client.ping(); - return getResponse(BuilderFactory.STRING); - } - - public Response setrange(byte[] key, long offset, byte[] value) { - client.setrange(key, offset, value); - return getResponse(BuilderFactory.LONG); - } - - public Response randomKey() { - client.randomKey(); - return getResponse(BuilderFactory.STRING); - } - - public Response publish(byte[] channel, byte[] message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); - } -} \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/BitOP.java b/src/main/java/redis/clients/jedis/BitOP.java new file mode 100644 index 0000000..5e3ee89 --- /dev/null +++ b/src/main/java/redis/clients/jedis/BitOP.java @@ -0,0 +1,8 @@ +package redis.clients.jedis; + +public enum BitOP { + AND, + OR, + XOR, + NOT; +} diff --git a/src/main/java/redis/clients/jedis/BuilderFactory.java b/src/main/java/redis/clients/jedis/BuilderFactory.java old mode 100644 new mode 100755 index 8a2320a..bebd2d6 --- a/src/main/java/redis/clients/jedis/BuilderFactory.java +++ b/src/main/java/redis/clients/jedis/BuilderFactory.java @@ -144,6 +144,13 @@ public class BuilderFactory { } List l = (List) data; final Set result = new LinkedHashSet(l); + for (final byte[] barray : l) { + if (barray == null) { + result.add(null); + } else { + result.add(barray); + } + } return result; } @@ -151,6 +158,24 @@ public class BuilderFactory { return "ZSet"; } }; + public static final Builder> BYTE_ARRAY_MAP = new Builder>() { + @SuppressWarnings("unchecked") + public Map build(Object data) { + final List flatHash = (List) data; + final Map hash = new HashMap(); + final Iterator iterator = flatHash.iterator(); + while (iterator.hasNext()) { + hash.put(iterator.next(), iterator.next()); + } + + return hash; + } + + public String toString() { + return "Map"; + } + + }; public static final Builder> STRING_ZSET = new Builder>() { @SuppressWarnings("unchecked") diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index 992d10d..d0a6228 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -572,16 +572,16 @@ public class Client extends BinaryClient implements Commands { strlen(SafeEncoder.encode(key)); } - public void lpushx(final String key, final String string) { - lpushx(SafeEncoder.encode(key), SafeEncoder.encode(string)); + public void lpushx(final String key, final String... string) { + lpushx(SafeEncoder.encode(key), getByteParams(string)); } public void persist(final String key) { persist(SafeEncoder.encode(key)); } - public void rpushx(final String key, final String string) { - rpushx(SafeEncoder.encode(key), SafeEncoder.encode(string)); + public void rpushx(final String key, final String... string) { + rpushx(SafeEncoder.encode(key), getByteParams(string)); } public void echo(final String string) { @@ -600,7 +600,11 @@ public class Client extends BinaryClient implements Commands { } public void setbit(final String key, final long offset, final boolean value) { - setbit(SafeEncoder.encode(key), offset, toByteArray(value ? 1 : 0)); + setbit(SafeEncoder.encode(key), offset, value); + } + + public void setbit(final String key, final long offset, final String value) { + setbit(SafeEncoder.encode(key), offset, SafeEncoder.encode(value)); } public void getbit(String key, long offset) { @@ -711,4 +715,29 @@ public class Client extends BinaryClient implements Commands { public void objectEncoding(String key) { objectEncoding(SafeEncoder.encode(key)); } + + public void bitcount(final String key) { + bitcount(SafeEncoder.encode(key)); + } + + public void bitcount(final String key, long start, long end) { + bitcount(SafeEncoder.encode(key), start, end); + } + + public void bitop(BitOP op, final String destKey, String... srcKeys) { + bitop(op, SafeEncoder.encode(destKey), getByteParams(srcKeys)); + } + + public void sentinel(final String... args) { + final byte[][] arg = new byte[args.length][]; + for (int i = 0; i < arg.length; i++) { + arg[i] = SafeEncoder.encode(args[i]); + } + sentinel(arg); + } + + public void sentinel(final String cmd, String arg1, int arg2) { + sentinel(SafeEncoder.encode(cmd), SafeEncoder.encode(arg1), + toByteArray(arg2)); + } } diff --git a/src/main/java/redis/clients/jedis/Commands.java b/src/main/java/redis/clients/jedis/Commands.java index 3776342..7f5f283 100644 --- a/src/main/java/redis/clients/jedis/Commands.java +++ b/src/main/java/redis/clients/jedis/Commands.java @@ -30,6 +30,8 @@ public interface Commands { public void setbit(String key, long offset, boolean value); + public void setbit(String key, long offset, String value); + public void getbit(String key, long offset); public void setrange(String key, long offset, String value); @@ -253,11 +255,11 @@ public interface Commands { public void strlen(final String key); - public void lpushx(final String key, final String string); + public void lpushx(final String key, final String... string); public void persist(final String key); - public void rpushx(final String key, final String string); + public void rpushx(final String key, final String... string); public void echo(final String string); @@ -289,4 +291,10 @@ public interface Commands { public void objectIdletime(String key); public void objectEncoding(String key); -} \ No newline at end of file + + public void bitcount(final String key); + + public void bitcount(final String key, long start, long end); + + public void bitop(BitOP op, final String destKey, String... srcKeys); +} diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 62040f9..db8cf37 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2,6 +2,7 @@ package redis.clients.jedis; import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; @@ -13,7 +14,7 @@ import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.util.SafeEncoder; import redis.clients.util.Slowlog; -public class Jedis extends BinaryJedis implements JedisCommands { +public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands { public Jedis(final String host) { super(host); } @@ -34,12 +35,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { super(uri); } - public String ping() { - checkIsInMulti(); - client.ping(); - return client.getStatusCodeReply(); - } - /** * Set the string value as value of the key. The string can't be longer than * 1073741824 bytes (1 GB). @@ -72,16 +67,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getBulkReply(); } - /** - * Ask the server to silently close the connection. - */ - - public String quit() { - checkIsInMulti(); - client.quit(); - return client.getStatusCodeReply(); - } - /** * Test if the specified key exists. The command returns "1" if the key * exists, otherwise "0" is returned. Note that even keys set with an empty @@ -114,6 +99,11 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply(); } + public Long del(String key) { + client.del(key); + return client.getIntegerReply(); + } + /** * Return the type of the value stored at key in form of a string. The type * can be one of "none", "string", "list", "set". "none" is returned if the @@ -134,19 +124,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getStatusCodeReply(); } - /** - * Delete all the keys of the currently selected DB. This command never - * fails. - * - * @return Status code reply - */ - - public String flushDB() { - checkIsInMulti(); - client.flushDB(); - return client.getStatusCodeReply(); - } - /** * Returns all the keys matching the glob-style pattern as space separated * strings. For example if you have in the database the keys "foo" and @@ -320,20 +297,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply(); } - /** - * Select the DB with having the specified zero-based numeric index. For - * default every new client connection is automatically selected to DB 0. - * - * @param index - * @return Status code reply - */ - - public String select(final int index) { - checkIsInMulti(); - client.select(index); - return client.getStatusCodeReply(); - } - /** * Move the specified key from the currently selected DB to the specified * destination DB. Note that this command returns 1 only if the key was @@ -353,19 +316,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply(); } - /** - * Delete all the keys of all the existing databases, not just the currently - * selected one. This command never fails. - * - * @return Status code reply - */ - - public String flushAll() { - checkIsInMulti(); - client.flushAll(); - return client.getStatusCodeReply(); - } - /** * GETSET is an atomic set this value and return the old value command. Set * key to the string value and return the old value stored at key. The @@ -916,8 +866,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { *

* Time complexity: O(1) * - * @see Jedis#lpush(String, String) - * * @param key * @param strings * @return Integer reply, specifically, the number of elements inside the @@ -937,8 +885,6 @@ public class Jedis extends BinaryJedis implements JedisCommands { *

* Time complexity: O(1) * - * @see Jedis#rpush(String, String) - * * @param key * @param strings * @return Integer reply, specifically, the number of elements inside the @@ -1868,6 +1814,42 @@ public class Jedis extends BinaryJedis implements JedisCommands { return multiBulkReply; } + public List blpop(String... args) { + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List brpop(String... args) { + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List blpop(String arg) { + String[] args = new String[1]; + args[0] = arg; + client.blpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + + public List brpop(String arg) { + String[] args = new String[1]; + args[0] = arg; + client.brpop(args); + client.setTimeoutInfinite(); + final List multiBulkReply = client.getMultiBulkReply(); + client.rollbackTimeout(); + return multiBulkReply; + } + /** * Sort a Set or a List accordingly to the specified parameters and store * the result at dstkey. @@ -1998,49 +1980,7 @@ public class Jedis extends BinaryJedis implements JedisCommands { return multiBulkReply; } - /** - * Request for authentication in a password protected Redis server. A Redis - * server can be instructed to require a password before to allow clients to - * issue commands. This is done using the requirepass directive in the Redis - * configuration file. If the password given by the client is correct the - * server replies with an OK status code reply and starts accepting commands - * from the client. Otherwise an error is returned and the clients needs to - * try a new password. Note that for the high performance nature of Redis it - * is possible to try a lot of passwords in parallel in very short time, so - * make sure to generate a strong and very long password so that this attack - * is infeasible. - * - * @param password - * @return Status code reply - */ - public String auth(final String password) { - checkIsInMulti(); - client.auth(password); - return client.getStatusCodeReply(); - } - - public void subscribe(JedisPubSub jedisPubSub, String... channels) { - checkIsInMulti(); - connect(); - client.setTimeoutInfinite(); - jedisPubSub.proceed(client, channels); - client.rollbackTimeout(); - } - - public Long publish(String channel, String message) { - checkIsInMulti(); - client.publish(channel, message); - return client.getIntegerReply(); - } - - public void psubscribe(JedisPubSub jedisPubSub, String... patterns) { - checkIsInMulti(); - connect(); - client.setTimeoutInfinite(); - jedisPubSub.proceedWithPatterns(client, patterns); - client.rollbackTimeout(); - } public Long zcount(final String key, final double min, final double max) { checkIsInMulti(); @@ -2647,7 +2587,7 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply(); } - public Long lpushx(final String key, final String string) { + public Long lpushx(final String key, final String... string) { client.lpushx(key, string); return client.getIntegerReply(); } @@ -2667,7 +2607,7 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply(); } - public Long rpushx(final String key, final String string) { + public Long rpushx(final String key, final String... string) { client.rpushx(key, string); return client.getIntegerReply(); } @@ -2713,6 +2653,11 @@ public class Jedis extends BinaryJedis implements JedisCommands { return client.getIntegerReply() == 1; } + public Boolean setbit(String key, long offset, String value) { + client.setbit(key, offset, value); + return client.getIntegerReply() == 1; + } + /** * Returns the bit value at offset in the string value stored at key * @@ -2822,6 +2767,29 @@ public class Jedis extends BinaryJedis implements JedisCommands { return getEvalResult(); } + public void subscribe(final JedisPubSub jedisPubSub, + final String... channels) { + client.setTimeoutInfinite(); + jedisPubSub.proceed(client, channels); + client.rollbackTimeout(); + } + + public Long publish(final String channel, final String message) { + checkIsInMulti(); + connect(); + client.publish(channel, message); + return client.getIntegerReply(); + } + + public void psubscribe(final JedisPubSub jedisPubSub, + final String... patterns) { + checkIsInMulti(); + connect(); + client.setTimeoutInfinite(); + jedisPubSub.proceedWithPatterns(client, patterns); + client.rollbackTimeout(); + } + private String[] getParams(List keys, List args) { int keyCount = keys.size(); int argCount = args.size(); @@ -2851,15 +2819,17 @@ public class Jedis extends BinaryJedis implements JedisCommands { private Object getEvalResult() { Object result = client.getOne(); - + if (result instanceof byte[]) return SafeEncoder.encode((byte[]) result); if (result instanceof List) { List list = (List) result; List listResult = new ArrayList(list.size()); - for (Object bin : list) - listResult.add(SafeEncoder.encode((byte[]) bin)); + for (Object bin : list) { + listResult.add((bin == null ? null : SafeEncoder + .encode((byte[]) bin))); + } return listResult; } @@ -2924,4 +2894,159 @@ public class Jedis extends BinaryJedis implements JedisCommands { client.objectIdletime(string); return client.getIntegerReply(); } + + public Long bitcount(final String key) { + client.bitcount(key); + return client.getIntegerReply(); + } + + public Long bitcount(final String key, long start, long end) { + client.bitcount(key, start, end); + return client.getIntegerReply(); + } + + public Long bitop(BitOP op, final String destKey, String... srcKeys) { + client.bitop(op, destKey, srcKeys); + return client.getIntegerReply(); + } + + /** + *

+     * redis 127.0.0.1:26381> sentinel masters
+     * 1)  1) "name"
+     *     2) "mymaster"
+     *     3) "ip"
+     *     4) "127.0.0.1"
+     *     5) "port"
+     *     6) "6379"
+     *     7) "runid"
+     *     8) "93d4d4e6e9c06d0eea36e27f31924ac26576081d"
+     *     9) "flags"
+     *    10) "master"
+     *    11) "pending-commands"
+     *    12) "0"
+     *    13) "last-ok-ping-reply"
+     *    14) "423"
+     *    15) "last-ping-reply"
+     *    16) "423"
+     *    17) "info-refresh"
+     *    18) "6107"
+     *    19) "num-slaves"
+     *    20) "1"
+     *    21) "num-other-sentinels"
+     *    22) "2"
+     *    23) "quorum"
+     *    24) "2"
+     * 
+     * 
+ * + * @return + */ + public List> sentinelMasters() { + client.sentinel(Protocol.SENTINEL_MASTERS); + final List reply = client.getObjectMultiBulkReply(); + + final List> masters = new ArrayList>(); + for (Object obj : reply) { + masters.add(BuilderFactory.STRING_MAP.build((List) obj)); + } + return masters; + } + + /** + *
+     * redis 127.0.0.1:26381> sentinel get-master-addr-by-name mymaster
+     * 1) "127.0.0.1"
+     * 2) "6379"
+     * 
+ * + * @param masterName + * @return two elements list of strings : host and port. + */ + public List sentinelGetMasterAddrByName(String masterName) { + client.sentinel(Protocol.SENTINEL_GET_MASTER_ADDR_BY_NAME, masterName); + final List reply = client.getObjectMultiBulkReply(); + return BuilderFactory.STRING_LIST.build(reply); + } + + /** + *
+     * redis 127.0.0.1:26381> sentinel reset mymaster
+     * (integer) 1
+     * 
+ * + * @param pattern + * @return + */ + public Long sentinelReset(String pattern) { + client.sentinel(Protocol.SENTINEL_RESET, pattern); + return client.getIntegerReply(); + } + + /** + *
+     * redis 127.0.0.1:26381> sentinel slaves mymaster
+     * 1)  1) "name"
+     *     2) "127.0.0.1:6380"
+     *     3) "ip"
+     *     4) "127.0.0.1"
+     *     5) "port"
+     *     6) "6380"
+     *     7) "runid"
+     *     8) "d7f6c0ca7572df9d2f33713df0dbf8c72da7c039"
+     *     9) "flags"
+     *    10) "slave"
+     *    11) "pending-commands"
+     *    12) "0"
+     *    13) "last-ok-ping-reply"
+     *    14) "47"
+     *    15) "last-ping-reply"
+     *    16) "47"
+     *    17) "info-refresh"
+     *    18) "657"
+     *    19) "master-link-down-time"
+     *    20) "0"
+     *    21) "master-link-status"
+     *    22) "ok"
+     *    23) "master-host"
+     *    24) "localhost"
+     *    25) "master-port"
+     *    26) "6379"
+     *    27) "slave-priority"
+     *    28) "100"
+     * 
+ * + * @param masterName + * @return + */ + public List> sentinelSlaves(String masterName) { + client.sentinel(Protocol.SENTINEL_SLAVES, masterName); + final List reply = client.getObjectMultiBulkReply(); + + final List> slaves = new ArrayList>(); + for (Object obj : reply) { + slaves.add(BuilderFactory.STRING_MAP.build((List) obj)); + } + return slaves; + } + + /** + *
+     * redis 127.0.0.1:26381> SENTINEL is-master-down-by-addr 127.0.0.1 1
+     * 1) (integer) 0
+     * 2) "?"
+     * redis 127.0.0.1:26381> SENTINEL is-master-down-by-addr 127.0.0.1 6379
+     * 1) (integer) 0
+     * 2) "aaef11fbb2712346a386078c7f9834e72ed51e96"
+     * 
+ * + * @return Long followed by the String (runid) + */ + public List sentinelIsMasterDownByAddr(String host, + int port) { + client.sentinel(Protocol.SENTINEL_IS_MASTER_DOWN_BY_ADDR, host, port); + final List reply = client.getObjectMultiBulkReply(); + return Arrays.asList(BuilderFactory.LONG.build(reply.get(0)), + BuilderFactory.STRING.build(reply.get(1))); + } } diff --git a/src/main/java/redis/clients/jedis/JedisCommands.java b/src/main/java/redis/clients/jedis/JedisCommands.java index d4c07f3..ea5016b 100644 --- a/src/main/java/redis/clients/jedis/JedisCommands.java +++ b/src/main/java/redis/clients/jedis/JedisCommands.java @@ -14,6 +14,8 @@ public interface JedisCommands { Boolean exists(String key); + Long persist(String key); + String type(String key); Long expire(String key, int seconds); @@ -24,6 +26,8 @@ public interface JedisCommands { Boolean setbit(String key, long offset, boolean value); + Boolean setbit(String key, long offset, String value); + Boolean getbit(String key, long offset); Long setrange(String key, long offset, String value); @@ -106,6 +110,8 @@ public interface JedisCommands { String srandmember(String key); + Long strlen(String key); + Long zadd(String key, double score, String member); Long zadd(String key, Map scoreMembers); @@ -187,7 +193,21 @@ public interface JedisCommands { Long linsert(String key, Client.LIST_POSITION where, String pivot, String value); - Long lpushx(String key, String string); + Long lpushx(String key, String... string); - Long rpushx(String key, String string); + Long rpushx(String key, String... string); + + List blpop(String arg); + + List brpop(String arg); + + Long del(String key); + + String echo(String string); + + Long move(String key, int dbIndex); + + Long bitcount(final String key); + + Long bitcount(final String key, long start, long end); } diff --git a/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java b/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java new file mode 100644 index 0000000..1b3c158 --- /dev/null +++ b/src/main/java/redis/clients/jedis/MultiKeyBinaryCommands.java @@ -0,0 +1,73 @@ +package redis.clients.jedis; + + +import java.util.List; +import java.util.Set; + +public interface MultiKeyBinaryCommands { + Long del(byte[]... keys); + + List blpop(int timeout, byte[]... keys); + + List brpop(int timeout, byte[]... keys); + + List blpop(byte[]... args); + + List brpop(byte[]... args); + + Set keys(byte[] pattern); + + List mget(byte[]... keys); + + String mset(byte[]... keysvalues); + + Long msetnx(byte[]... keysvalues); + + String rename(byte[] oldkey, byte[] newkey); + + Long renamenx(byte[] oldkey, byte[] newkey); + + byte[] rpoplpush(byte[] srckey, byte[] dstkey); + + Set sdiff(byte[]... keys); + + Long sdiffstore(byte[] dstkey, byte[]... keys); + + Set sinter(byte[]... keys); + + Long sinterstore(byte[] dstkey, byte[]... keys); + + Long smove(byte[] srckey, byte[] dstkey, byte[] member); + + Long sort(byte[] key, SortingParams sortingParameters, byte[] dstkey); + + Long sort(byte[] key, byte[] dstkey); + + Set sunion(byte[]... keys); + + Long sunionstore(byte[] dstkey, byte[]... keys); + + String watch(byte[]... keys); + + String unwatch(); + + Long zinterstore(byte[] dstkey, byte[]... sets); + + Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets); + + Long zunionstore(byte[] dstkey, byte[]... sets); + + Long zunionstore(byte[] dstkey, ZParams params, byte[]... sets); + + byte[] brpoplpush(byte[] source, byte[] destination, int timeout); + + Long publish(byte[] channel, byte[] message); + + void subscribe(BinaryJedisPubSub jedisPubSub, byte[]... channels); + + void psubscribe(BinaryJedisPubSub jedisPubSub, byte[]... patterns); + + byte[] randomBinaryKey(); + + Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys); +} diff --git a/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java b/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java new file mode 100644 index 0000000..85d004b --- /dev/null +++ b/src/main/java/redis/clients/jedis/MultiKeyBinaryRedisPipeline.java @@ -0,0 +1,67 @@ +package redis.clients.jedis; + + +import java.util.List; +import java.util.Set; + +/** + * Multikey related commands (these are split out because they are non-shardable) + */ +public interface MultiKeyBinaryRedisPipeline { + + Response del(byte[]... keys); + + Response> blpop(byte[]... args); + + Response> brpop(byte[]... args); + + Response> keys(byte[] pattern); + + Response> mget(byte[]... keys); + + Response mset(byte[]... keysvalues); + + Response msetnx(byte[]... keysvalues); + + Response rename(byte[] oldkey, byte[] newkey); + + Response renamenx(byte[] oldkey, byte[] newkey); + + Response rpoplpush(byte[] srckey, byte[] dstkey); + + Response> sdiff(byte[]... keys); + + Response sdiffstore(byte[] dstkey, byte[]... keys); + + Response> sinter(byte[]... keys); + + Response sinterstore(byte[] dstkey, byte[]... keys); + + Response smove(byte[] srckey, byte[] dstkey, byte[] member); + + Response> sort(byte[] key, SortingParams sortingParameters, byte[] dstkey); + + Response> sort(byte[] key, byte[] dstkey); + + Response> sunion(byte[]... keys); + + Response sunionstore(byte[] dstkey, byte[]... keys); + + Response watch(byte[]... keys); + + Response zinterstore(byte[] dstkey, byte[]... sets); + + Response zinterstore(byte[] dstkey, ZParams params, byte[]... sets); + + Response zunionstore(byte[] dstkey, byte[]... sets); + + Response zunionstore(byte[] dstkey, ZParams params, byte[]... sets); + + Response brpoplpush(byte[] source, byte[] destination, int timeout); + + Response publish(byte[] channel, byte[] message); + + Response randomKeyBinary(); + + Response bitop(BitOP op, final byte[] destKey, byte[]... srcKeys); +} diff --git a/src/main/java/redis/clients/jedis/MultiKeyCommands.java b/src/main/java/redis/clients/jedis/MultiKeyCommands.java new file mode 100644 index 0000000..c98017f --- /dev/null +++ b/src/main/java/redis/clients/jedis/MultiKeyCommands.java @@ -0,0 +1,73 @@ +package redis.clients.jedis; + + +import java.util.List; +import java.util.Set; + +public interface MultiKeyCommands { + Long del(String... keys); + + List blpop(int timeout, String... keys); + + List brpop(int timeout, String... keys); + + List blpop(String... args); + + List brpop(String... args); + + Set keys(String pattern); + + List mget(String... keys); + + String mset(String... keysvalues); + + Long msetnx(String... keysvalues); + + String rename(String oldkey, String newkey); + + Long renamenx(String oldkey, String newkey); + + String rpoplpush(String srckey, String dstkey); + + Set sdiff(String... keys); + + Long sdiffstore(String dstkey, String... keys); + + Set sinter(String... keys); + + Long sinterstore(String dstkey, String... keys); + + Long smove(String srckey, String dstkey, String member); + + Long sort(String key, SortingParams sortingParameters, String dstkey); + + Long sort(String key, String dstkey); + + Set sunion(String... keys); + + Long sunionstore(String dstkey, String... keys); + + String watch(String... keys); + + String unwatch(); + + Long zinterstore(String dstkey, String... sets); + + Long zinterstore(String dstkey, ZParams params, String... sets); + + Long zunionstore(String dstkey, String... sets); + + Long zunionstore(String dstkey, ZParams params, String... sets); + + String brpoplpush(String source, String destination, int timeout); + + Long publish(String channel, String message); + + void subscribe(JedisPubSub jedisPubSub, String... channels); + + void psubscribe(JedisPubSub jedisPubSub, String... patterns); + + String randomKey(); + + Long bitop(BitOP op, final String destKey, String... srcKeys); +} diff --git a/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java b/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java new file mode 100644 index 0000000..1478e81 --- /dev/null +++ b/src/main/java/redis/clients/jedis/MultiKeyCommandsPipeline.java @@ -0,0 +1,67 @@ +package redis.clients.jedis; + + +import java.util.List; +import java.util.Set; + + +/** + * Multikey related commands (these are split out because they are non-shardable) + */ +public interface MultiKeyCommandsPipeline { + Response del(String... keys); + + Response> blpop(String... args); + + Response> brpop(String... args); + + Response> keys(String pattern); + + Response> mget(String... keys); + + Response mset(String... keysvalues); + + Response msetnx(String... keysvalues); + + Response rename(String oldkey, String newkey); + + Response renamenx(String oldkey, String newkey); + + Response rpoplpush(String srckey, String dstkey); + + Response> sdiff(String... keys); + + Response sdiffstore(String dstkey, String... keys); + + Response> sinter(String... keys); + + Response sinterstore(String dstkey, String... keys); + + Response smove(String srckey, String dstkey, String member); + + Response> sort(String key, SortingParams sortingParameters, String dstkey); + + Response> sort(String key, String dstkey); + + Response> sunion(String... keys); + + Response sunionstore(String dstkey, String... keys); + + Response watch(String... keys); + + Response zinterstore(String dstkey, String... sets); + + Response zinterstore(String dstkey, ZParams params, String... sets); + + Response zunionstore(String dstkey, String... sets); + + Response zunionstore(String dstkey, ZParams params, String... sets); + + Response brpoplpush(String source, String destination, int timeout); + + Response publish(String channel, String message); + + Response randomKey(); + + Response bitop(BitOP op, final String destKey, String... srcKeys); +} diff --git a/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java new file mode 100644 index 0000000..ccf0dfd --- /dev/null +++ b/src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java @@ -0,0 +1,370 @@ +package redis.clients.jedis; + +import java.util.List; +import java.util.Set; + +abstract class MultiKeyPipelineBase extends PipelineBase implements + BasicRedisPipeline, + MultiKeyBinaryRedisPipeline, + MultiKeyCommandsPipeline { + + protected Client client = null; + + public Response> brpop(String... args) { + client.brpop(args); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> blpop(String... args) { + client.blpop(args); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> brpop(byte[]... args) { + client.brpop(args); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response> blpop(byte[]... args) { + client.blpop(args); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response del(String... keys) { + client.del(keys); + return getResponse(BuilderFactory.LONG); + } + + public Response del(byte[]... keys) { + client.del(keys); + return getResponse(BuilderFactory.LONG); + } + + public Response> keys(String pattern) { + getClient(pattern).keys(pattern); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> keys(byte[] pattern) { + getClient(pattern).keys(pattern); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> mget(String... keys) { + client.mget(keys); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> mget(byte[]... keys) { + client.mget(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response mset(String... keysvalues) { + client.mset(keysvalues); + return getResponse(BuilderFactory.STRING); + } + + public Response mset(byte[]... keysvalues) { + client.mset(keysvalues); + return getResponse(BuilderFactory.STRING); + } + + public Response msetnx(String... keysvalues) { + client.msetnx(keysvalues); + return getResponse(BuilderFactory.LONG); + } + + public Response msetnx(byte[]... keysvalues) { + client.msetnx(keysvalues); + return getResponse(BuilderFactory.LONG); + } + + public Response rename(String oldkey, String newkey) { + client.rename(oldkey, newkey); + return getResponse(BuilderFactory.STRING); + } + + public Response rename(byte[] oldkey, byte[] newkey) { + client.rename(oldkey, newkey); + return getResponse(BuilderFactory.STRING); + } + + public Response renamenx(String oldkey, String newkey) { + client.renamenx(oldkey, newkey); + return getResponse(BuilderFactory.LONG); + } + + public Response renamenx(byte[] oldkey, byte[] newkey) { + client.renamenx(oldkey, newkey); + return getResponse(BuilderFactory.LONG); + } + + public Response rpoplpush(String srckey, String dstkey) { + client.rpoplpush(srckey, dstkey); + return getResponse(BuilderFactory.STRING); + } + + public Response rpoplpush(byte[] srckey, byte[] dstkey) { + client.rpoplpush(srckey, dstkey); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response> sdiff(String... keys) { + client.sdiff(keys); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> sdiff(byte[]... keys) { + client.sdiff(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response sdiffstore(String dstkey, String... keys) { + client.sdiffstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response sdiffstore(byte[] dstkey, byte[]... keys) { + client.sdiffstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response> sinter(String... keys) { + client.sinter(keys); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> sinter(byte[]... keys) { + client.sinter(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response sinterstore(String dstkey, String... keys) { + client.sinterstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response sinterstore(byte[] dstkey, byte[]... keys) { + client.sinterstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response smove(String srckey, String dstkey, String member) { + client.smove(srckey, dstkey, member); + return getResponse(BuilderFactory.LONG); + } + + public Response smove(byte[] srckey, byte[] dstkey, byte[] member) { + client.smove(srckey, dstkey, member); + return getResponse(BuilderFactory.LONG); + } + + public Response> sort(String key, + SortingParams sortingParameters, String dstkey) { + client.sort(key, sortingParameters, dstkey); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> sort(byte[] key, + SortingParams sortingParameters, byte[] dstkey) { + client.sort(key, sortingParameters, dstkey); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response> sort(String key, String dstkey) { + client.sort(key, dstkey); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> sort(byte[] key, byte[] dstkey) { + client.sort(key, dstkey); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response> sunion(String... keys) { + client.sunion(keys); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> sunion(byte[]... keys) { + client.sunion(keys); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response sunionstore(String dstkey, String... keys) { + client.sunionstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response sunionstore(byte[] dstkey, byte[]... keys) { + client.sunionstore(dstkey, keys); + return getResponse(BuilderFactory.LONG); + } + + public Response watch(String... keys) { + client.watch(keys); + return getResponse(BuilderFactory.STRING); + } + + public Response watch(byte[]... keys) { + client.watch(keys); + return getResponse(BuilderFactory.STRING); + } + + public Response zinterstore(String dstkey, String... sets) { + client.zinterstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zinterstore(byte[] dstkey, byte[]... sets) { + client.zinterstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zinterstore(String dstkey, ZParams params, + String... sets) { + client.zinterstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zinterstore(byte[] dstkey, ZParams params, + byte[]... sets) { + client.zinterstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zunionstore(String dstkey, String... sets) { + client.zunionstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zunionstore(byte[] dstkey, byte[]... sets) { + client.zunionstore(dstkey, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zunionstore(String dstkey, ZParams params, + String... sets) { + client.zunionstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response zunionstore(byte[] dstkey, ZParams params, + byte[]... sets) { + client.zunionstore(dstkey, params, sets); + return getResponse(BuilderFactory.LONG); + } + + public Response bgrewriteaof() { + client.bgrewriteaof(); + return getResponse(BuilderFactory.STRING); + } + + public Response bgsave() { + client.bgsave(); + return getResponse(BuilderFactory.STRING); + } + + public Response configGet(String pattern) { + client.configGet(pattern); + return getResponse(BuilderFactory.STRING); + } + + public Response configSet(String parameter, String value) { + client.configSet(parameter, value); + return getResponse(BuilderFactory.STRING); + } + + public Response brpoplpush(String source, String destination, + int timeout) { + client.brpoplpush(source, destination, timeout); + return getResponse(BuilderFactory.STRING); + } + + public Response brpoplpush(byte[] source, byte[] destination, + int timeout) { + client.brpoplpush(source, destination, timeout); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response configResetStat() { + client.configResetStat(); + return getResponse(BuilderFactory.STRING); + } + + public Response save() { + client.save(); + return getResponse(BuilderFactory.STRING); + } + + public Response lastsave() { + client.lastsave(); + return getResponse(BuilderFactory.LONG); + } + + public Response publish(String channel, String message) { + client.publish(channel, message); + return getResponse(BuilderFactory.LONG); + } + + public Response publish(byte[] channel, byte[] message) { + client.publish(channel, message); + return getResponse(BuilderFactory.LONG); + } + + public Response randomKey() { + client.randomKey(); + return getResponse(BuilderFactory.STRING); + } + + public Response randomKeyBinary() { + client.randomKey(); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response flushDB() { + client.flushDB(); + return getResponse(BuilderFactory.STRING); + } + + public Response flushAll() { + client.flushAll(); + return getResponse(BuilderFactory.STRING); + } + + public Response info() { + client.info(); + return getResponse(BuilderFactory.STRING); + } + + public Response dbSize() { + client.dbSize(); + return getResponse(BuilderFactory.LONG); + } + + public Response shutdown() { + client.shutdown(); + return getResponse(BuilderFactory.STRING); + } + + public Response ping() { + client.ping(); + return getResponse(BuilderFactory.STRING); + } + + public Response select(int index) { + client.select(index); + return getResponse(BuilderFactory.STRING); + } + + public Response bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { + client.bitop(op, destKey, srcKeys); + return getResponse(BuilderFactory.LONG); + } + + public Response bitop(BitOP op, String destKey, String... srcKeys) { + client.bitop(op, destKey, srcKeys); + return getResponse(BuilderFactory.LONG); + } +} diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java old mode 100644 new mode 100755 index cd1ecaa..ee680eb --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -1,15 +1,11 @@ package redis.clients.jedis; -import static redis.clients.jedis.Protocol.toByteArray; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.exceptions.JedisDataException; -public class Pipeline extends Queable { +import java.util.ArrayList; +import java.util.List; + +public class Pipeline extends MultiKeyPipelineBase { private MultiResponseBuilder currentMulti; @@ -52,13 +48,21 @@ public class Pipeline extends Queable { return super.getResponse(builder); } } - - private Client client; - + public void setClient(Client client) { this.client = client; } + @Override + protected Client getClient(byte[] key) { + return client; + } + + @Override + protected Client getClient(String key) { + return client; + } + /** * Syncronize pipeline by reading all responses. This operation close the * pipeline. In order to get return values from pipelined commands, capture @@ -78,7 +82,6 @@ public class Pipeline extends Queable { * right response type (usually it is a waste of time). * * @return A list of all the responses in the order you executed them. - * @see sync */ public List syncAndReturnAll() { List unformatted = client.getAll(); @@ -94,1184 +97,6 @@ public class Pipeline extends Queable { return formatted; } - public Response append(String key, String value) { - client.append(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response append(byte[] key, byte[] value) { - client.append(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> blpop(String... args) { - client.blpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> blpop(byte[]... args) { - client.blpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> brpop(String... args) { - client.brpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> brpop(byte[]... args) { - client.brpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response decr(String key) { - client.decr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response decr(byte[] key) { - client.decr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response decrBy(String key, long integer) { - client.decrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response decrBy(byte[] key, long integer) { - client.decrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response del(String... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); - } - - public Response del(byte[]... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); - } - - public Response echo(String string) { - client.echo(string); - return getResponse(BuilderFactory.STRING); - } - - public Response echo(byte[] string) { - client.echo(string); - return getResponse(BuilderFactory.STRING); - } - - public Response exists(String key) { - client.exists(key); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response exists(byte[] key) { - client.exists(key); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response expire(String key, int seconds) { - client.expire(key, seconds); - return getResponse(BuilderFactory.LONG); - } - - public Response expire(byte[] key, int seconds) { - client.expire(key, seconds); - return getResponse(BuilderFactory.LONG); - } - - public Response expireAt(String key, long unixTime) { - client.expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); - } - - public Response expireAt(byte[] key, long unixTime) { - client.expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); - } - - public Response get(String key) { - client.get(key); - return getResponse(BuilderFactory.STRING); - } - - public Response get(byte[] key) { - client.get(key); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response getbit(String key, long offset) { - client.getbit(key, offset); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response getrange(String key, long startOffset, - long endOffset) { - client.getrange(key, startOffset, endOffset); - return getResponse(BuilderFactory.STRING); - } - - public Response getSet(String key, String value) { - client.getSet(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response getSet(byte[] key, byte[] value) { - client.getSet(key, value); - return getResponse(BuilderFactory.BYTE_ARRAY); - } - - public Response hdel(String key, String field) { - client.hdel(key, field); - return getResponse(BuilderFactory.LONG); - } - - public Response hdel(byte[] key, byte[] field) { - client.hdel(key, field); - return getResponse(BuilderFactory.LONG); - } - - public Response hexists(String key, String field) { - client.hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response hexists(byte[] key, byte[] field) { - client.hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response hget(String key, String field) { - client.hget(key, field); - return getResponse(BuilderFactory.STRING); - } - - public Response hget(byte[] key, byte[] field) { - client.hget(key, field); - return getResponse(BuilderFactory.STRING); - } - - public Response> hgetAll(String key) { - client.hgetAll(key); - return getResponse(BuilderFactory.STRING_MAP); - } - - public Response> hgetAll(byte[] key) { - client.hgetAll(key); - return getResponse(BuilderFactory.STRING_MAP); - } - - public Response hincrBy(String key, String field, long value) { - client.hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hincrBy(byte[] key, byte[] field, long value) { - client.hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hincrByFloat(String key, String field, double value) { - client.hincrByFloat(key, field, value); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response hincrByFloat(byte[] key, byte[] field, double value) { - client.hincrByFloat(key, field, value); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response> hkeys(String key) { - client.hkeys(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> hkeys(byte[] key) { - client.hkeys(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response hlen(String key) { - client.hlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response hlen(byte[] key) { - client.hlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> hmget(String key, String... fields) { - client.hmget(key, fields); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> hmget(byte[] key, byte[]... fields) { - client.hmget(key, fields); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response hmset(String key, Map hash) { - client.hmset(key, hash); - return getResponse(BuilderFactory.STRING); - } - - public Response hmset(byte[] key, Map hash) { - client.hmset(key, hash); - return getResponse(BuilderFactory.STRING); - } - - public Response hset(String key, String field, String value) { - client.hset(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hset(byte[] key, byte[] field, byte[] value) { - client.hset(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hsetnx(String key, String field, String value) { - client.hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hsetnx(byte[] key, byte[] field, byte[] value) { - client.hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> hvals(String key) { - client.hvals(key); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> hvals(byte[] key) { - client.hvals(key); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response incr(String key) { - client.incr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response incr(byte[] key) { - client.incr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response incrBy(String key, long integer) { - client.incrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response incrBy(byte[] key, long integer) { - client.incrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response incrByFloat(String key, double value) { - client.incrByFloat(key, value); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response incrByFloat(byte[] key, double value) { - client.incrByFloat(key, value); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response> keys(String pattern) { - client.keys(pattern); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> keys(byte[] pattern) { - client.keys(pattern); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response lindex(String key, int index) { - client.lindex(key, index); - return getResponse(BuilderFactory.STRING); - } - - public Response lindex(byte[] key, int index) { - client.lindex(key, index); - return getResponse(BuilderFactory.STRING); - } - - public Response linsert(String key, LIST_POSITION where, - String pivot, String value) { - client.linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); - } - - public Response linsert(byte[] key, LIST_POSITION where, - byte[] pivot, byte[] value) { - client.linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); - } - - public Response llen(String key) { - client.llen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response llen(byte[] key) { - client.llen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response lpop(String key) { - client.lpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response lpop(byte[] key) { - client.lpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response lpush(String key, String string) { - client.lpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response lpush(byte[] key, byte[] string) { - client.lpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response lpushx(String key, String string) { - client.lpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response lpushx(byte[] key, byte[] bytes) { - client.lpushx(key, bytes); - return getResponse(BuilderFactory.LONG); - } - - public Response> lrange(String key, long start, long end) { - client.lrange(key, start, end); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> lrange(byte[] key, long start, long end) { - client.lrange(key, start, end); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response lrem(String key, long count, String value) { - client.lrem(key, count, value); - return getResponse(BuilderFactory.LONG); - } - - public Response lrem(byte[] key, long count, byte[] value) { - client.lrem(key, count, value); - return getResponse(BuilderFactory.LONG); - } - - public Response lset(String key, long index, String value) { - client.lset(key, index, value); - return getResponse(BuilderFactory.STRING); - } - - public Response lset(byte[] key, long index, byte[] value) { - client.lset(key, index, value); - return getResponse(BuilderFactory.STRING); - } - - public Response ltrim(String key, long start, long end) { - client.ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response ltrim(byte[] key, long start, long end) { - client.ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> mget(String... keys) { - client.mget(keys); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> mget(byte[]... keys) { - client.mget(keys); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response move(String key, int dbIndex) { - client.move(key, dbIndex); - return getResponse(BuilderFactory.LONG); - } - - public Response move(byte[] key, int dbIndex) { - client.move(key, dbIndex); - return getResponse(BuilderFactory.LONG); - } - - public Response mset(String... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); - } - - public Response mset(byte[]... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); - } - - public Response msetnx(String... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); - } - - public Response msetnx(byte[]... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); - } - - public Response persist(String key) { - client.persist(key); - return getResponse(BuilderFactory.LONG); - } - - public Response persist(byte[] key) { - client.persist(key); - return getResponse(BuilderFactory.LONG); - } - - public Response rename(String oldkey, String newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); - } - - public Response rename(byte[] oldkey, byte[] newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); - } - - public Response renamenx(String oldkey, String newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); - } - - public Response renamenx(byte[] oldkey, byte[] newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); - } - - public Response rpop(String key) { - client.rpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response rpop(byte[] key) { - client.rpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response rpoplpush(String srckey, String dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.STRING); - } - - public Response rpoplpush(byte[] srckey, byte[] dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.STRING); - } - - public Response rpush(String key, String string) { - client.rpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response rpush(byte[] key, byte[] string) { - client.rpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response rpushx(String key, String string) { - client.rpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response rpushx(byte[] key, byte[] string) { - client.rpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response sadd(String key, String member) { - client.sadd(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response sadd(byte[] key, byte[] member) { - client.sadd(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response scard(String key) { - client.scard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response scard(byte[] key) { - client.scard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> sdiff(String... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> sdiff(byte[]... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sdiffstore(String dstkey, String... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sdiffstore(byte[] dstkey, byte[]... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response set(String key, String value) { - client.set(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response set(byte[] key, byte[] value) { - client.set(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response setbit(String key, long offset, boolean value) { - client.setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response setex(String key, int seconds, String value) { - client.setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); - } - - public Response setex(byte[] key, int seconds, byte[] value) { - client.setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); - } - - public Response setnx(String key, String value) { - client.setnx(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response setnx(byte[] key, byte[] value) { - client.setnx(key, value); - return getResponse(BuilderFactory.LONG); - } - - public Response setrange(String key, long offset, String value) { - client.setrange(key, offset, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> sinter(String... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> sinter(byte[]... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sinterstore(String dstkey, String... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sinterstore(byte[] dstkey, byte[]... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sismember(String key, String member) { - client.sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response sismember(byte[] key, byte[] member) { - client.sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response> smembers(String key) { - client.smembers(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> smembers(byte[] key) { - client.smembers(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response smove(String srckey, String dstkey, String member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); - } - - public Response smove(byte[] srckey, byte[] dstkey, byte[] member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); - } - - public Response sort(String key) { - client.sort(key); - return getResponse(BuilderFactory.LONG); - } - - public Response sort(byte[] key) { - client.sort(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> sort(String key, - SortingParams sortingParameters) { - client.sort(key, sortingParameters); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(byte[] key, - SortingParams sortingParameters) { - client.sort(key, sortingParameters); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(String key, - SortingParams sortingParameters, String dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(byte[] key, - SortingParams sortingParameters, byte[] dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(String key, String dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(byte[] key, byte[] dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response spop(String key) { - client.spop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response spop(byte[] key) { - client.spop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response srandmember(String key) { - client.srandmember(key); - return getResponse(BuilderFactory.STRING); - } - - public Response srandmember(byte[] key) { - client.srandmember(key); - return getResponse(BuilderFactory.STRING); - } - - public Response srem(String key, String member) { - client.srem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response srem(byte[] key, byte[] member) { - client.srem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response strlen(String key) { - client.strlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response strlen(byte[] key) { - client.strlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response substr(String key, int start, int end) { - client.substr(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response substr(byte[] key, int start, int end) { - client.substr(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> sunion(String... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> sunion(byte[]... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sunionstore(String dstkey, String... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sunionstore(byte[] dstkey, byte[]... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response ttl(String key) { - client.ttl(key); - return getResponse(BuilderFactory.LONG); - } - - public Response ttl(byte[] key) { - client.ttl(key); - return getResponse(BuilderFactory.LONG); - } - - public Response type(String key) { - client.type(key); - return getResponse(BuilderFactory.STRING); - } - - public Response type(byte[] key) { - client.type(key); - return getResponse(BuilderFactory.STRING); - } - - public Response watch(String... keys) { - client.watch(keys); - return getResponse(BuilderFactory.STRING); - } - - public Response watch(byte[]... keys) { - client.watch(keys); - return getResponse(BuilderFactory.STRING); - } - - public Response zadd(String key, double score, String member) { - client.zadd(key, score, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zadd(byte[] key, double score, byte[] member) { - client.zadd(key, score, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zcard(String key) { - client.zcard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response zcard(byte[] key) { - client.zcard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response zcount(String key, double min, double max) { - client.zcount(key, min, max); - return getResponse(BuilderFactory.LONG); - } - - public Response zcount(byte[] key, double min, double max) { - client.zcount(key, toByteArray(min), toByteArray(max)); - return getResponse(BuilderFactory.LONG); - } - - public Response zincrby(String key, double score, String member) { - client.zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zincrby(byte[] key, double score, byte[] member) { - client.zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zinterstore(String dstkey, String... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zinterstore(byte[] dstkey, byte[]... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zinterstore(String dstkey, ZParams params, - String... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zinterstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrange(String key, int start, int end) { - client.zrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrange(byte[] key, int start, int end) { - client.zrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, double min, - double max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(byte[] key, double min, - double max) { - return zrangeByScore(key, toByteArray(min), toByteArray(max)); - } - - public Response> zrangeByScore(String key, String min, - String max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, double min, - double max, int offset, int count) { - client.zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(byte[] key, double min, - double max, int offset, int count) { - return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, count); - } - - public Response> zrangeByScore(byte[] key, byte[] min, - byte[] max, int offset, int count) { - client.zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, - double max) { - client.zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(byte[] key, double min, - double max) { - return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); - } - - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max) { - client.zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, - double max, int offset, int count) { - client.zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(byte[] key, double min, - double max, int offset, int count) { - client.zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(byte[] key, byte[] min, - byte[] max, int offset, int count) { - client.zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScore(String key, double max, - double min) { - client.zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(byte[] key, double max, - double min) { - client.zrevrangeByScore(key, toByteArray(max), toByteArray(min)); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(String key, String max, - String min) { - client.zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min) { - client.zrevrangeByScore(key, max, min); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(String key, double max, - double min, int offset, int count) { - client.zrevrangeByScore(key, max, min, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(byte[] key, double max, - double min, int offset, int count) { - client.zrevrangeByScore(key, toByteArray(max), toByteArray(min), offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScore(byte[] key, byte[] max, - byte[] min, int offset, int count) { - client.zrevrangeByScore(key, max, min, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeByScoreWithScores(String key, - double max, double min) { - client.zrevrangeByScoreWithScores(key, max, min); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min) { - client.zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min)); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min) { - client.zrevrangeByScoreWithScores(key, max, min); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(String key, - double max, double min, int offset, int count) { - client.zrevrangeByScoreWithScores(key, max, min, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - double max, double min, int offset, int count) { - client.zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min), offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeByScoreWithScores(byte[] key, - byte[] max, byte[] min, int offset, int count) { - client.zrevrangeByScoreWithScores(key, max, min, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeWithScores(String key, int start, int end) { - client.zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeWithScores(byte[] key, int start, int end) { - client.zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zrank(String key, String member) { - client.zrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrank(byte[] key, byte[] member) { - client.zrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrem(String key, String member) { - client.zrem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrem(byte[] key, byte[] member) { - client.zrem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByRank(String key, int start, int end) { - client.zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByRank(byte[] key, int start, int end) { - client.zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(String key, double start, double end) { - client.zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(byte[] key, double start, double end) { - client.zremrangeByScore(key, toByteArray(start), toByteArray(end)); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(byte[] key, byte[] start, byte[] end) { - client.zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrevrange(String key, int start, int end) { - client.zrevrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrange(byte[] key, int start, int end) { - client.zrevrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeWithScores(String key, int start, - int end) { - client.zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeWithScores(byte[] key, int start, - int end) { - client.zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zrevrank(String key, String member) { - client.zrevrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrevrank(byte[] key, byte[] member) { - client.zrevrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zscore(String key, String member) { - client.zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zscore(byte[] key, byte[] member) { - client.zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zunionstore(String dstkey, String... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zunionstore(byte[] dstkey, byte[]... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zunionstore(String dstkey, ZParams params, - String... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zunionstore(byte[] dstkey, ZParams params, - byte[]... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response bgrewriteaof() { - client.bgrewriteaof(); - return getResponse(BuilderFactory.STRING); - } - - public Response bgsave() { - client.bgsave(); - return getResponse(BuilderFactory.STRING); - } - - public Response configGet(String pattern) { - client.configGet(pattern); - return getResponse(BuilderFactory.STRING); - } - - public Response configSet(String parameter, String value) { - client.configSet(parameter, value); - return getResponse(BuilderFactory.STRING); - } - - public Response brpoplpush(String source, String destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.STRING); - } - - public Response brpoplpush(byte[] source, byte[] destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.STRING); - } - - public Response configResetStat() { - client.configResetStat(); - return getResponse(BuilderFactory.STRING); - } - - public Response save() { - client.save(); - return getResponse(BuilderFactory.STRING); - } - - public Response lastsave() { - client.lastsave(); - return getResponse(BuilderFactory.LONG); - } - public Response discard() { client.discard(); return getResponse(BuilderFactory.STRING); @@ -1284,59 +109,11 @@ public class Pipeline extends Queable { return response; } - public void multi() { + public Response multi() { client.multi(); - getResponse(BuilderFactory.STRING); //Expecting OK + Response response = getResponse(BuilderFactory.STRING); //Expecting OK currentMulti = new MultiResponseBuilder(); + return response; } - public Response publish(String channel, String message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); - } - - public Response publish(byte[] channel, byte[] message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); - } - - public Response flushDB() { - client.flushDB(); - return getResponse(BuilderFactory.STRING); - } - - public Response flushAll() { - client.flushAll(); - return getResponse(BuilderFactory.STRING); - } - - public Response info() { - client.info(); - return getResponse(BuilderFactory.STRING); - } - - public Response dbSize() { - client.dbSize(); - return getResponse(BuilderFactory.LONG); - } - - public Response shutdown() { - client.shutdown(); - return getResponse(BuilderFactory.STRING); - } - - public Response ping() { - client.ping(); - return getResponse(BuilderFactory.STRING); - } - - public Response randomKey() { - client.randomKey(); - return getResponse(BuilderFactory.STRING); - } - - public Response select(int index){ - client.select(index); - return getResponse(BuilderFactory.STRING); - } -} \ No newline at end of file +} diff --git a/src/main/java/redis/clients/jedis/PipelineBase.java b/src/main/java/redis/clients/jedis/PipelineBase.java new file mode 100644 index 0000000..fb79a03 --- /dev/null +++ b/src/main/java/redis/clients/jedis/PipelineBase.java @@ -0,0 +1,982 @@ +package redis.clients.jedis; + +import redis.clients.jedis.BinaryClient.LIST_POSITION; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static redis.clients.jedis.Protocol.toByteArray; + +abstract class PipelineBase extends Queable implements + BinaryRedisPipeline, + RedisPipeline { + + protected abstract Client getClient(String key); + + protected abstract Client getClient(byte[] key); + + public Response append(String key, String value) { + getClient(key).append(key, value); + return getResponse(BuilderFactory.LONG); + } + + public Response append(byte[] key, byte[] value) { + getClient(key).append(key, value); + return getResponse(BuilderFactory.LONG); + } + + public Response> blpop(String key) { + String[] temp = new String[1]; + temp[0] = key; + getClient(key).blpop(temp); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> brpop(String key) { + String[] temp = new String[1]; + temp[0] = key; + getClient(key).brpop(temp); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> blpop(byte[] key) { + byte[][] temp = new byte[1][]; + temp[0] = key; + getClient(key).blpop(temp); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response> brpop(byte[] key) { + byte[][] temp = new byte[1][]; + temp[0] = key; + getClient(key).brpop(temp); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response decr(String key) { + getClient(key).decr(key); + return getResponse(BuilderFactory.LONG); + } + + public Response decr(byte[] key) { + getClient(key).decr(key); + return getResponse(BuilderFactory.LONG); + } + + public Response decrBy(String key, long integer) { + getClient(key).decrBy(key, integer); + return getResponse(BuilderFactory.LONG); + } + + public Response decrBy(byte[] key, long integer) { + getClient(key).decrBy(key, integer); + return getResponse(BuilderFactory.LONG); + } + + public Response del(String key) { + getClient(key).del(key); + return getResponse(BuilderFactory.LONG); + } + + public Response del(byte[] key) { + getClient(key).del(key); + return getResponse(BuilderFactory.LONG); + } + + public Response echo(String string) { + getClient(string).echo(string); + return getResponse(BuilderFactory.STRING); + } + + public Response echo(byte[] string) { + getClient(string).echo(string); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response exists(String key) { + getClient(key).exists(key); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response exists(byte[] key) { + getClient(key).exists(key); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response expire(String key, int seconds) { + getClient(key).expire(key, seconds); + return getResponse(BuilderFactory.LONG); + } + + public Response expire(byte[] key, int seconds) { + getClient(key).expire(key, seconds); + return getResponse(BuilderFactory.LONG); + } + + public Response expireAt(String key, long unixTime) { + getClient(key).expireAt(key, unixTime); + return getResponse(BuilderFactory.LONG); + } + + public Response expireAt(byte[] key, long unixTime) { + getClient(key).expireAt(key, unixTime); + return getResponse(BuilderFactory.LONG); + } + + public Response get(String key) { + getClient(key).get(key); + return getResponse(BuilderFactory.STRING); + } + + public Response get(byte[] key) { + getClient(key).get(key); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response getbit(String key, long offset) { + getClient(key).getbit(key, offset); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response getbit(byte[] key, long offset) { + getClient(key).getbit(key, offset); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response getrange(String key, long startOffset, + long endOffset) { + getClient(key).getrange(key, startOffset, endOffset); + return getResponse(BuilderFactory.STRING); + } + + public Response getSet(String key, String value) { + getClient(key).getSet(key, value); + return getResponse(BuilderFactory.STRING); + } + + public Response getSet(byte[] key, byte[] value) { + getClient(key).getSet(key, value); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response getrange(byte[] key, long startOffset, long endOffset) { + getClient(key).getrange(key, startOffset, endOffset); + return getResponse(BuilderFactory.LONG); + } + + public Response hdel(String key, String field) { + getClient(key).hdel(key, field); + return getResponse(BuilderFactory.LONG); + } + + public Response hdel(byte[] key, byte[] field) { + getClient(key).hdel(key, field); + return getResponse(BuilderFactory.LONG); + } + + public Response hexists(String key, String field) { + getClient(key).hexists(key, field); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response hexists(byte[] key, byte[] field) { + getClient(key).hexists(key, field); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response hget(String key, String field) { + getClient(key).hget(key, field); + return getResponse(BuilderFactory.STRING); + } + + public Response hget(byte[] key, byte[] field) { + getClient(key).hget(key, field); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response> hgetAll(String key) { + getClient(key).hgetAll(key); + return getResponse(BuilderFactory.STRING_MAP); + } + + public Response> hgetAll(byte[] key) { + getClient(key).hgetAll(key); + return getResponse(BuilderFactory.BYTE_ARRAY_MAP); + } + + public Response hincrBy(String key, String field, long value) { + getClient(key).hincrBy(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response hincrBy(byte[] key, byte[] field, long value) { + getClient(key).hincrBy(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response hincrByFloat(String key, String field, double value) { + getClient(key).hincrByFloat(key, field, value); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response hincrByFloat(byte[] key, byte[] field, double value) { + getClient(key).hincrByFloat(key, field, value); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response> hkeys(String key) { + getClient(key).hkeys(key); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> hkeys(byte[] key) { + getClient(key).hkeys(key); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response hlen(String key) { + getClient(key).hlen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response hlen(byte[] key) { + getClient(key).hlen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response> hmget(String key, String... fields) { + getClient(key).hmget(key, fields); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> hmget(byte[] key, byte[]... fields) { + getClient(key).hmget(key, fields); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response hmset(String key, Map hash) { + getClient(key).hmset(key, hash); + return getResponse(BuilderFactory.STRING); + } + + public Response hmset(byte[] key, Map hash) { + getClient(key).hmset(key, hash); + return getResponse(BuilderFactory.STRING); + } + + public Response hset(String key, String field, String value) { + getClient(key).hset(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response hset(byte[] key, byte[] field, byte[] value) { + getClient(key).hset(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response hsetnx(String key, String field, String value) { + getClient(key).hsetnx(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response hsetnx(byte[] key, byte[] field, byte[] value) { + getClient(key).hsetnx(key, field, value); + return getResponse(BuilderFactory.LONG); + } + + public Response> hvals(String key) { + getClient(key).hvals(key); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> hvals(byte[] key) { + getClient(key).hvals(key); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response incr(String key) { + getClient(key).incr(key); + return getResponse(BuilderFactory.LONG); + } + + public Response incr(byte[] key) { + getClient(key).incr(key); + return getResponse(BuilderFactory.LONG); + } + + public Response incrBy(String key, long integer) { + getClient(key).incrBy(key, integer); + return getResponse(BuilderFactory.LONG); + } + + public Response incrBy(byte[] key, long integer) { + getClient(key).incrBy(key, integer); + return getResponse(BuilderFactory.LONG); + } + + public Response incrByFloat(String key, double value) { + getClient(key).incrByFloat(key, value); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response incrByFloat(byte[] key, double value) { + getClient(key).incrByFloat(key, value); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response lindex(String key, int index) { + getClient(key).lindex(key, index); + return getResponse(BuilderFactory.STRING); + } + + public Response lindex(byte[] key, int index) { + getClient(key).lindex(key, index); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response linsert(String key, LIST_POSITION where, + String pivot, String value) { + getClient(key).linsert(key, where, pivot, value); + return getResponse(BuilderFactory.LONG); + } + + public Response linsert(byte[] key, LIST_POSITION where, + byte[] pivot, byte[] value) { + getClient(key).linsert(key, where, pivot, value); + return getResponse(BuilderFactory.LONG); + } + + public Response llen(String key) { + getClient(key).llen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response llen(byte[] key) { + getClient(key).llen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response lpop(String key) { + getClient(key).lpop(key); + return getResponse(BuilderFactory.STRING); + } + + public Response lpop(byte[] key) { + getClient(key).lpop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response lpush(String key, String... string) { + getClient(key).lpush(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response lpush(byte[] key, byte[]... string) { + getClient(key).lpush(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response lpushx(String key, String... string) { + getClient(key).lpushx(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response lpushx(byte[] key, byte[]... bytes) { + getClient(key).lpushx(key, bytes); + return getResponse(BuilderFactory.LONG); + } + + public Response> lrange(String key, long start, long end) { + getClient(key).lrange(key, start, end); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> lrange(byte[] key, long start, long end) { + getClient(key).lrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response lrem(String key, long count, String value) { + getClient(key).lrem(key, count, value); + return getResponse(BuilderFactory.LONG); + } + + public Response lrem(byte[] key, long count, byte[] value) { + getClient(key).lrem(key, count, value); + return getResponse(BuilderFactory.LONG); + } + + public Response lset(String key, long index, String value) { + getClient(key).lset(key, index, value); + return getResponse(BuilderFactory.STRING); + } + + public Response lset(byte[] key, long index, byte[] value) { + getClient(key).lset(key, index, value); + return getResponse(BuilderFactory.STRING); + } + + public Response ltrim(String key, long start, long end) { + getClient(key).ltrim(key, start, end); + return getResponse(BuilderFactory.STRING); + } + + public Response ltrim(byte[] key, long start, long end) { + getClient(key).ltrim(key, start, end); + return getResponse(BuilderFactory.STRING); + } + + public Response move(String key, int dbIndex) { + getClient(key).move(key, dbIndex); + return getResponse(BuilderFactory.LONG); + } + + public Response move(byte[] key, int dbIndex) { + getClient(key).move(key, dbIndex); + return getResponse(BuilderFactory.LONG); + } + + public Response persist(String key) { + getClient(key).persist(key); + return getResponse(BuilderFactory.LONG); + } + + public Response persist(byte[] key) { + getClient(key).persist(key); + return getResponse(BuilderFactory.LONG); + } + + public Response rpop(String key) { + getClient(key).rpop(key); + return getResponse(BuilderFactory.STRING); + } + + public Response rpop(byte[] key) { + getClient(key).rpop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response rpush(String key, String... string) { + getClient(key).rpush(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response rpush(byte[] key, byte[]... string) { + getClient(key).rpush(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response rpushx(String key, String... string) { + getClient(key).rpushx(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response rpushx(byte[] key, byte[]... string) { + getClient(key).rpushx(key, string); + return getResponse(BuilderFactory.LONG); + } + + public Response sadd(String key, String... member) { + getClient(key).sadd(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response sadd(byte[] key, byte[]... member) { + getClient(key).sadd(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response scard(String key) { + getClient(key).scard(key); + return getResponse(BuilderFactory.LONG); + } + + public Response scard(byte[] key) { + getClient(key).scard(key); + return getResponse(BuilderFactory.LONG); + } + + public Response set(String key, String value) { + getClient(key).set(key, value); + return getResponse(BuilderFactory.STRING); + } + + public Response set(byte[] key, byte[] value) { + getClient(key).set(key, value); + return getResponse(BuilderFactory.STRING); + } + + public Response setbit(String key, long offset, boolean value) { + getClient(key).setbit(key, offset, value); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response setbit(byte[] key, long offset, byte[] value) { + getClient(key).setbit(key, offset, value); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response setex(String key, int seconds, String value) { + getClient(key).setex(key, seconds, value); + return getResponse(BuilderFactory.STRING); + } + + public Response setex(byte[] key, int seconds, byte[] value) { + getClient(key).setex(key, seconds, value); + return getResponse(BuilderFactory.STRING); + } + + public Response setnx(String key, String value) { + getClient(key).setnx(key, value); + return getResponse(BuilderFactory.LONG); + } + + public Response setnx(byte[] key, byte[] value) { + getClient(key).setnx(key, value); + return getResponse(BuilderFactory.LONG); + } + + public Response setrange(String key, long offset, String value) { + getClient(key).setrange(key, offset, value); + return getResponse(BuilderFactory.LONG); + } + + public Response setrange(byte[] key, long offset, byte[] value) { + getClient(key).setrange(key, offset, value); + return getResponse(BuilderFactory.LONG); + } + + public Response sismember(String key, String member) { + getClient(key).sismember(key, member); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response sismember(byte[] key, byte[] member) { + getClient(key).sismember(key, member); + return getResponse(BuilderFactory.BOOLEAN); + } + + public Response> smembers(String key) { + getClient(key).smembers(key); + return getResponse(BuilderFactory.STRING_SET); + } + + public Response> smembers(byte[] key) { + getClient(key).smembers(key); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> sort(String key) { + getClient(key).sort(key); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> sort(byte[] key) { + getClient(key).sort(key); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response> sort(String key, + SortingParams sortingParameters) { + getClient(key).sort(key, sortingParameters); + return getResponse(BuilderFactory.STRING_LIST); + } + + public Response> sort(byte[] key, + SortingParams sortingParameters) { + getClient(key).sort(key, sortingParameters); + return getResponse(BuilderFactory.BYTE_ARRAY_LIST); + } + + public Response spop(String key) { + getClient(key).spop(key); + return getResponse(BuilderFactory.STRING); + } + + public Response spop(byte[] key) { + getClient(key).spop(key); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response srandmember(String key) { + getClient(key).srandmember(key); + return getResponse(BuilderFactory.STRING); + } + + public Response srandmember(byte[] key) { + getClient(key).srandmember(key); + return getResponse(BuilderFactory.BYTE_ARRAY); + } + + public Response srem(String key, String member) { + getClient(key).srem(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response srem(byte[] key, byte[] member) { + getClient(key).srem(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response strlen(String key) { + getClient(key).strlen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response strlen(byte[] key) { + getClient(key).strlen(key); + return getResponse(BuilderFactory.LONG); + } + + public Response substr(String key, int start, int end) { + getClient(key).substr(key, start, end); + return getResponse(BuilderFactory.STRING); + } + + public Response substr(byte[] key, int start, int end) { + getClient(key).substr(key, start, end); + return getResponse(BuilderFactory.STRING); + } + + public Response ttl(String key) { + getClient(key).ttl(key); + return getResponse(BuilderFactory.LONG); + } + + public Response ttl(byte[] key) { + getClient(key).ttl(key); + return getResponse(BuilderFactory.LONG); + } + + public Response type(String key) { + getClient(key).type(key); + return getResponse(BuilderFactory.STRING); + } + + public Response type(byte[] key) { + getClient(key).type(key); + return getResponse(BuilderFactory.STRING); + } + + public Response zadd(String key, double score, String member) { + getClient(key).zadd(key, score, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zadd(byte[] key, double score, byte[] member) { + getClient(key).zadd(key, score, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zcard(String key) { + getClient(key).zcard(key); + return getResponse(BuilderFactory.LONG); + } + + public Response zcard(byte[] key) { + getClient(key).zcard(key); + return getResponse(BuilderFactory.LONG); + } + + public Response zcount(String key, double min, double max) { + getClient(key).zcount(key, min, max); + return getResponse(BuilderFactory.LONG); + } + + public Response zcount(byte[] key, double min, double max) { + getClient(key).zcount(key, toByteArray(min), toByteArray(max)); + return getResponse(BuilderFactory.LONG); + } + + public Response zincrby(String key, double score, String member) { + getClient(key).zincrby(key, score, member); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response zincrby(byte[] key, double score, byte[] member) { + getClient(key).zincrby(key, score, member); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response> zrange(String key, int start, int end) { + getClient(key).zrange(key, start, end); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrange(byte[] key, int start, int end) { + getClient(key).zrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrangeByScore(String key, double min, + double max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrangeByScore(byte[] key, double min, + double max) { + return zrangeByScore(key, toByteArray(min), toByteArray(max)); + } + + public Response> zrangeByScore(String key, String min, + String max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrangeByScore(byte[] key, byte[] min, + byte[] max) { + getClient(key).zrangeByScore(key, min, max); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrangeByScore(String key, double min, + double max, int offset, int count) { + getClient(key).zrangeByScore(key, min, max, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrangeByScore(byte[] key, double min, + double max, int offset, int count) { + return zrangeByScore(key, toByteArray(min), toByteArray(max), offset, count); + } + + public Response> zrangeByScore(byte[] key, byte[] min, + byte[] max, int offset, int count) { + getClient(key).zrangeByScore(key, min, max, offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrangeByScoreWithScores(String key, double min, + double max) { + getClient(key).zrangeByScoreWithScores(key, min, max); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeByScoreWithScores(byte[] key, double min, + double max) { + return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max)); + } + + public Response> zrangeByScoreWithScores(byte[] key, byte[] min, + byte[] max) { + getClient(key).zrangeByScoreWithScores(key, min, max); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeByScoreWithScores(String key, double min, + double max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeByScoreWithScores(byte[] key, double min, + double max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeByScoreWithScores(byte[] key, byte[] min, + byte[] max, int offset, int count) { + getClient(key).zrangeByScoreWithScores(key, min, max, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrevrangeByScore(String key, double max, + double min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrevrangeByScore(byte[] key, double max, + double min) { + getClient(key).zrevrangeByScore(key, toByteArray(max), toByteArray(min)); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrevrangeByScore(String key, String max, + String min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrevrangeByScore(byte[] key, byte[] max, + byte[] min) { + getClient(key).zrevrangeByScore(key, max, min); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrevrangeByScore(String key, double max, + double min, int offset, int count) { + getClient(key).zrevrangeByScore(key, max, min, offset, count); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrevrangeByScore(byte[] key, double max, + double min, int offset, int count) { + getClient(key).zrevrangeByScore(key, toByteArray(max), toByteArray(min), offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrevrangeByScore(byte[] key, byte[] max, + byte[] min, int offset, int count) { + getClient(key).zrevrangeByScore(key, max, min, offset, count); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrevrangeByScoreWithScores(String key, + double max, double min) { + getClient(key).zrevrangeByScoreWithScores(key, max, min); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + double max, double min) { + getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min)); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min) { + getClient(key).zrevrangeByScoreWithScores(key, max, min); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrevrangeByScoreWithScores(String key, + double max, double min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + double max, double min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min), offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrevrangeByScoreWithScores(byte[] key, + byte[] max, byte[] min, int offset, int count) { + getClient(key).zrevrangeByScoreWithScores(key, max, min, offset, count); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response> zrangeWithScores(String key, int start, int end) { + getClient(key).zrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrangeWithScores(byte[] key, int start, int end) { + getClient(key).zrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET_BINARY); + } + + public Response zrank(String key, String member) { + getClient(key).zrank(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zrank(byte[] key, byte[] member) { + getClient(key).zrank(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zrem(String key, String member) { + getClient(key).zrem(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zrem(byte[] key, byte[] member) { + getClient(key).zrem(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zremrangeByRank(String key, int start, int end) { + getClient(key).zremrangeByRank(key, start, end); + return getResponse(BuilderFactory.LONG); + } + + public Response zremrangeByRank(byte[] key, int start, int end) { + getClient(key).zremrangeByRank(key, start, end); + return getResponse(BuilderFactory.LONG); + } + + public Response zremrangeByScore(String key, double start, double end) { + getClient(key).zremrangeByScore(key, start, end); + return getResponse(BuilderFactory.LONG); + } + + public Response zremrangeByScore(byte[] key, double start, double end) { + getClient(key).zremrangeByScore(key, toByteArray(start), toByteArray(end)); + return getResponse(BuilderFactory.LONG); + } + + public Response zremrangeByScore(byte[] key, byte[] start, byte[] end) { + getClient(key).zremrangeByScore(key, start, end); + return getResponse(BuilderFactory.LONG); + } + + public Response> zrevrange(String key, int start, int end) { + getClient(key).zrevrange(key, start, end); + return getResponse(BuilderFactory.STRING_ZSET); + } + + public Response> zrevrange(byte[] key, int start, int end) { + getClient(key).zrevrange(key, start, end); + return getResponse(BuilderFactory.BYTE_ARRAY_ZSET); + } + + public Response> zrevrangeWithScores(String key, int start, + int end) { + getClient(key).zrevrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response> zrevrangeWithScores(byte[] key, int start, + int end) { + getClient(key).zrevrangeWithScores(key, start, end); + return getResponse(BuilderFactory.TUPLE_ZSET); + } + + public Response zrevrank(String key, String member) { + getClient(key).zrevrank(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zrevrank(byte[] key, byte[] member) { + getClient(key).zrevrank(key, member); + return getResponse(BuilderFactory.LONG); + } + + public Response zscore(String key, String member) { + getClient(key).zscore(key, member); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response zscore(byte[] key, byte[] member) { + getClient(key).zscore(key, member); + return getResponse(BuilderFactory.DOUBLE); + } + + public Response bitcount(String key) { + getClient(key).bitcount(key); + return getResponse(BuilderFactory.LONG); + } + + public Response bitcount(String key, long start, long end) { + getClient(key).bitcount(key, start, end); + return getResponse(BuilderFactory.LONG); + } + + public Response bitcount(byte[] key) { + getClient(key).bitcount(key); + return getResponse(BuilderFactory.LONG); + } + + public Response bitcount(byte[] key, long start, long end) { + getClient(key).bitcount(key, start, end); + return getResponse(BuilderFactory.LONG); + } + +} diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index e061ae5..5dc692f 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -24,6 +24,12 @@ public final class Protocol { public static final byte MINUS_BYTE = '-'; public static final byte COLON_BYTE = ':'; + public static final String SENTINEL_MASTERS = "masters"; + public static final String SENTINEL_GET_MASTER_ADDR_BY_NAME = "get-master-addr-by-name"; + public static final String SENTINEL_RESET = "reset"; + public static final String SENTINEL_SLAVES = "slaves"; + public static final String SENTINEL_IS_MASTER_DOWN_BY_ADDR = "is-master-down-by-addr"; + private Protocol() { // this prevent the class from instantiation } @@ -131,6 +137,10 @@ public final class Protocol { return process(is); } + public static final byte[] toByteArray(final boolean value) { + return toByteArray(value ? 1 : 0); + } + public static final byte[] toByteArray(final int value) { return SafeEncoder.encode(String.valueOf(value)); } @@ -144,7 +154,7 @@ public final class Protocol { } public static enum Command { - PING, SET, GET, QUIT, EXISTS, DEL, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCRBYFLOAT, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HINCRBYFLOAT, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT; + PING, SET, GET, QUIT, EXISTS, DEL, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCRBYFLOAT, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HINCRBYFLOAT, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL; public final byte[] raw; @@ -154,7 +164,7 @@ public final class Protocol { } public static enum Keyword { - AGGREGATE, ALPHA, ASC, BY, DESC, GET, LIMIT, MESSAGE, NO, NOSORT, PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, OK, ONE, QUEUED, SET, STORE, SUBSCRIBE, UNSUBSCRIBE, WEIGHTS, WITHSCORES, RESETSTAT, RESET, FLUSH, EXISTS, LOAD, KILL, LEN, REFCOUNT, ENCODING, IDLETIME; + AGGREGATE, ALPHA, ASC, BY, DESC, GET, LIMIT, MESSAGE, NO, NOSORT, PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, OK, ONE, QUEUED, SET, STORE, SUBSCRIBE, UNSUBSCRIBE, WEIGHTS, WITHSCORES, RESETSTAT, RESET, FLUSH, EXISTS, LOAD, KILL, LEN, REFCOUNT, ENCODING, IDLETIME, AND, OR, XOR, NOT; public final byte[] raw; Keyword() { diff --git a/src/main/java/redis/clients/jedis/RedisPipeline.java b/src/main/java/redis/clients/jedis/RedisPipeline.java new file mode 100644 index 0000000..43b7516 --- /dev/null +++ b/src/main/java/redis/clients/jedis/RedisPipeline.java @@ -0,0 +1,200 @@ +package redis.clients.jedis; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author guy + */ +public interface RedisPipeline { + Response append(String key, String value); + + Response> blpop(String arg); + + Response> brpop(String arg); + + Response decr(String key); + + Response decrBy(String key, long integer); + + Response del(String key); + + Response echo(String string); + + Response exists(String key); + + Response expire(String key, int seconds); + + Response expireAt(String key, long unixTime); + + Response get(String key); + + Response getbit(String key, long offset); + + + + Response getrange(String key, long startOffset, + long endOffset); + + Response getSet(String key, String value); + + Response hdel(String key, String field); + + Response hexists(String key, String field); + + Response hget(String key, String field); + + Response> hgetAll(String key); + + Response hincrBy(String key, String field, long value); + + Response> hkeys(String key); + + Response hlen(String key); + + Response> hmget(String key, String... fields); + + Response hmset(String key, Map hash); + + Response hset(String key, String field, String value); + + Response hsetnx(String key, String field, String value); + + Response> hvals(String key); + + Response incr(String key); + + Response incrBy(String key, long integer); + + Response lindex(String key, int index); + + Response linsert(String key, BinaryClient.LIST_POSITION where, + String pivot, String value); + + Response llen(String key); + + Response lpop(String key); + + Response lpush(String key, String... string); + + Response lpushx(String key, String... string); + + Response> lrange(String key, long start, long end); + + Response lrem(String key, long count, String value); + + Response lset(String key, long index, String value); + + Response ltrim(String key, long start, long end); + + Response move(String key, int dbIndex); + + Response persist(String key); + + Response rpop(String key); + + Response rpush(String key, String... string); + + Response rpushx(String key, String... string); + + Response sadd(String key, String... member); + + Response scard(String key); + + Response sismember(String key, String member); + + Response set(String key, String value); + + Response setbit(String key, long offset, boolean value); + + Response setex(String key, int seconds, String value); + + Response setnx(String key, String value); + + Response setrange(String key, long offset, String value); + + Response> smembers(String key); + + Response> sort(String key); + + Response> sort(String key, + SortingParams sortingParameters); + + Response spop(String key); + + Response srandmember(String key); + + Response srem(String key, String member); + + Response strlen(String key); + + Response substr(String key, int start, int end); + + Response ttl(String key); + + Response type(String key); + + Response zadd(String key, double score, String member); + + Response zcard(String key); + + Response zcount(String key, double min, double max); + + Response zincrby(String key, double score, String member); + + Response> zrange(String key, int start, int end); + + Response> zrangeByScore(String key, double min, + double max); + + Response> zrangeByScore(String key, String min, + String max); + + Response> zrangeByScore(String key, double min, + double max, int offset, int count); + + Response> zrangeByScoreWithScores(String key, double min, + double max); + + Response> zrangeByScoreWithScores(String key, double min, + double max, int offset, int count); + + Response> zrevrangeByScore(String key, double max, + double min); + + Response> zrevrangeByScore(String key, String max, + String min); + + Response> zrevrangeByScore(String key, double max, + double min, int offset, int count); + + Response> zrevrangeByScoreWithScores(String key, + double max, double min); + + Response> zrevrangeByScoreWithScores(String key, + double max, double min, int offset, int count); + + Response> zrangeWithScores(String key, int start, int end); + + Response zrank(String key, String member); + + Response zrem(String key, String member); + + Response zremrangeByRank(String key, int start, int end); + + Response zremrangeByScore(String key, double start, double end); + + Response> zrevrange(String key, int start, int end); + + Response> zrevrangeWithScores(String key, int start, + int end); + + Response zrevrank(String key, String member); + + Response zscore(String key, String member); + + Response bitcount(String key); + + Response bitcount(String key, long start, long end); +} diff --git a/src/main/java/redis/clients/jedis/ScriptingCommands.java b/src/main/java/redis/clients/jedis/ScriptingCommands.java new file mode 100644 index 0000000..ba693a4 --- /dev/null +++ b/src/main/java/redis/clients/jedis/ScriptingCommands.java @@ -0,0 +1,23 @@ +package redis.clients.jedis; + +import java.util.List; + +public interface ScriptingCommands { + Object eval(String script, int keyCount, String... params); + + Object eval(String script, List keys, List args); + + Object eval(String script); + + Object evalsha(String script); + + Object evalsha(String sha1, List keys, List args); + + Object evalsha(String sha1, int keyCount, String... params); + + Boolean scriptExists(String sha1); + + List scriptExists(String... sha1); + + String scriptLoad(String script); +} diff --git a/src/main/java/redis/clients/jedis/ShardedJedis.java b/src/main/java/redis/clients/jedis/ShardedJedis.java index 6e45e26..1572299 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedis.java +++ b/src/main/java/redis/clients/jedis/ShardedJedis.java @@ -1,13 +1,13 @@ package redis.clients.jedis; +import redis.clients.jedis.BinaryClient.LIST_POSITION; +import redis.clients.util.Hashing; + import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; -import redis.clients.jedis.BinaryClient.LIST_POSITION; -import redis.clients.util.Hashing; - public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { public ShardedJedis(List shards) { super(shards); @@ -26,13 +26,6 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { super(shards, algo, keyTagPattern); } - public void disconnect() { - for (Jedis jedis : getAllShards()) { - jedis.quit(); - jedis.disconnect(); - } - } - public String set(String key, String value) { Jedis j = getShard(key); return j.set(key, value); @@ -43,6 +36,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.get(key); } + public String echo(String string) { + Jedis j = getShard(string); + return j.echo(string); + } + public Boolean exists(String key) { Jedis j = getShard(key); return j.exists(key); @@ -73,6 +71,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.setbit(key, offset, value); } + public Boolean setbit(String key, long offset, String value) { + Jedis j = getShard(key); + return j.setbit(key, offset, value); + } + public Boolean getbit(String key, long offset) { Jedis j = getShard(key); return j.getbit(key, offset); @@ -103,6 +106,16 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.setex(key, seconds, value); } + public List blpop(String arg) { + Jedis j = getShard(arg); + return j.blpop(arg); + } + + public List brpop(String arg) { + Jedis j = getShard(arg); + return j.brpop(arg); + } + public Long decrBy(String key, long integer) { Jedis j = getShard(key); return j.decrBy(key, integer); @@ -218,16 +231,31 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { return j.lpush(key, strings); } - public Long lpushx(String key, String string) { + public Long lpushx(String key, String... string) { Jedis j = getShard(key); return j.lpushx(key, string); } - public Long rpushx(String key, String string) { + public Long strlen(final String key) { + Jedis j = getShard(key); + return j.strlen(key); + } + + public Long move(String key, int dbIndex) { + Jedis j = getShard(key); + return j.move(key, dbIndex); + } + + public Long rpushx(String key, String... string) { Jedis j = getShard(key); return j.rpushx(key, string); } + public Long persist(final String key) { + Jedis j = getShard(key); + return j.persist(key); + } + public Long llen(String key) { Jedis j = getShard(key); return j.llen(key); @@ -493,4 +521,16 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands { Jedis j = getShard(key); return j.linsert(key, where, pivot, value); } + + public Long bitcount(final String key) { + Jedis j = getShard(key); + return j.bitcount(key); + } + + public Long bitcount(final String key, long start, long end) { + Jedis j = getShard(key); + return j.bitcount(key, start, end); + } + + } diff --git a/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java b/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java index e8eeed7..be6db92 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java +++ b/src/main/java/redis/clients/jedis/ShardedJedisPipeline.java @@ -1,10 +1,11 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; -import java.util.*; - -public class ShardedJedisPipeline extends Queable { +public class ShardedJedisPipeline extends PipelineBase { private BinaryShardedJedis jedis; private List results = new ArrayList(); private Queue clients = new LinkedList(); @@ -25,521 +26,6 @@ public class ShardedJedisPipeline extends Queable { this.jedis = jedis; } - public Response set(String key, String value) { - Client c = getClient(key); - c.set(key, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response get(String key) { - Client c = getClient(key); - c.get(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response del(String key) { - Client c = getClient(key); - c.del(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response exists(String key) { - Client c = getClient(key); - c.exists(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response type(String key) { - Client c = getClient(key); - c.type(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response expire(String key, int seconds) { - Client c = getClient(key); - c.expire(key, seconds); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response expireAt(String key, long unixTime) { - Client c = getClient(key); - c.expireAt(key, unixTime); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response ttl(String key) { - Client c = getClient(key); - c.ttl(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response getSet(String key, String value) { - Client c = getClient(key); - c.getSet(key, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response setnx(String key, String value) { - Client c = getClient(key); - c.setnx(key, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response setex(String key, int seconds, String value) { - Client c = getClient(key); - c.setex(key, seconds, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response decrBy(String key, long integer) { - Client c = getClient(key); - c.decrBy(key, integer); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response decr(String key) { - Client c = getClient(key); - c.decr(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response incrBy(String key, int integer) { - Client c = getClient(key); - c.incrBy(key, integer); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response incrByFloat(String key, double value) { - Client c = getClient(key); - c.incrByFloat(key, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response incr(String key) { - Client c = getClient(key); - c.incr(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response append(String key, String value) { - Client c = getClient(key); - c.append(key, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response substr(String key, int start, int end) { - Client c = getClient(key); - c.substr(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response hset(String key, String field, String value) { - Client c = getClient(key); - c.hset(key, field, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response hget(String key, String field) { - Client c = getClient(key); - c.hget(key, field); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response hsetnx(String key, String field, String value) { - Client c = getClient(key); - c.hsetnx(key, field, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response hmset(String key, Map hash) { - Client c = getClient(key); - c.hmset(key, hash); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response> hmget(String key, String... fields) { - Client c = getClient(key); - c.hmget(key, fields); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response hincrBy(String key, String field, int value) { - Client c = getClient(key); - c.hincrBy(key, field, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response hincrByFloat(String key, String field, double value) { - Client c = getClient(key); - c.hincrByFloat(key, field, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response hexists(String key, String field) { - Client c = getClient(key); - c.hexists(key, field); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response hdel(String key, String field) { - Client c = getClient(key); - c.hdel(key, field); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response hlen(String key) { - Client c = getClient(key); - c.hlen(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> hkeys(String key) { - Client c = getClient(key); - c.hkeys(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> hvals(String key) { - Client c = getClient(key); - c.hvals(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response> hgetAll(String key) { - Client c = getClient(key); - c.hgetAll(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_MAP); - } - - public Response rpush(String key, String string) { - Client c = getClient(key); - c.rpush(key, string); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response lpush(String key, String string) { - Client c = getClient(key); - c.lpush(key, string); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response llen(String key) { - Client c = getClient(key); - c.llen(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> lrange(String key, int start, int end) { - Client c = getClient(key); - c.lrange(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response ltrim(String key, int start, int end) { - Client c = getClient(key); - c.ltrim(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response lindex(String key, int index) { - Client c = getClient(key); - c.lindex(key, index); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response lset(String key, int index, String value) { - Client c = getClient(key); - c.lset(key, index, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response lrem(String key, int count, String value) { - Client c = getClient(key); - c.lrem(key, count, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response lpop(String key) { - Client c = getClient(key); - c.lpop(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response rpop(String key) { - Client c = getClient(key); - c.rpop(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response sadd(String key, String member) { - Client c = getClient(key); - c.sadd(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> smembers(String key) { - Client c = getClient(key); - c.smembers(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response srem(String key, String member) { - Client c = getClient(key); - c.srem(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response spop(String key) { - Client c = getClient(key); - c.spop(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response scard(String key) { - Client c = getClient(key); - c.scard(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response sismember(String key, String member) { - Client c = getClient(key); - c.sismember(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response srandmember(String key) { - Client c = getClient(key); - c.srandmember(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING); - } - - public Response zadd(String key, double score, String member) { - Client c = getClient(key); - c.zadd(key, score, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrange(String key, int start, int end) { - Client c = getClient(key); - c.zrange(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response zrem(String key, String member) { - Client c = getClient(key); - c.zrem(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response zincrby(String key, double score, String member) { - Client c = getClient(key); - c.zincrby(key, score, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zrank(String key, String member) { - Client c = getClient(key); - c.zrank(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response zrevrank(String key, String member) { - Client c = getClient(key); - c.zrevrank(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrevrange(String key, int start, int end) { - Client c = getClient(key); - c.zrevrange(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeWithScores(String key, int start, int end) { - Client c = getClient(key); - c.zrangeWithScores(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrevrangeWithScores(String key, int start, int end) { - Client c = getClient(key); - c.zrevrangeWithScores(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zcard(String key) { - Client c = getClient(key); - c.zcard(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response zscore(String key, String member) { - Client c = getClient(key); - c.zscore(key, member); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response sort(String key) { - Client c = getClient(key); - c.sort(key); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response> sort(String key, SortingParams sortingParameters) { - Client c = getClient(key); - c.sort(key, sortingParameters); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response zcount(String key, double min, double max) { - Client c = getClient(key); - c.zcount(key, min, max); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrangeByScore(String key, double min, double max) { - Client c = getClient(key); - c.zrangeByScore(key, min, max); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, double min, double max, - int offset, int count) { - Client c = getClient(key); - c.zrangeByScore(key, min, max, offset, count); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, double max) { - Client c = getClient(key); - c.zrangeByScoreWithScores(key, min, max); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, double max, - int offset, int count) { - Client c = getClient(key); - c.zrangeByScoreWithScores(key, min, max, offset, count); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zremrangeByRank(String key, int start, int end) { - Client c = getClient(key); - c.zremrangeByRank(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(String key, double start, double end) { - Client c = getClient(key); - c.zremrangeByScore(key, start, end); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response linsert(String key, LIST_POSITION where, String pivot, - String value) { - Client c = getClient(key); - c.linsert(key, where, pivot, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - - public Response getbit(String key, long offset) { - Client c = getClient(key); - c.getbit(key, offset); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response setbit(String key, long offset, boolean value) { - Client c = getClient(key); - c.setbit(key, offset, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response setrange(String key, long offset, String value) { - Client c = getClient(key); - c.setrange(key, offset, value); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - - } - - public Response getrange(String key, long startOffset, long endOffset) { - Client c = getClient(key); - c.getrange(key, startOffset, endOffset); - results.add(new FutureResult(c)); - return getResponse(BuilderFactory.LONG); - } - public List getResults() { List r = new ArrayList(); for (FutureResult fr : results) { @@ -583,9 +69,19 @@ public class ShardedJedisPipeline extends Queable { public void execute() { } - private Client getClient(String key) { + @Override + protected Client getClient(String key) { Client client = jedis.getShard(key).getClient(); clients.add(client); + results.add(new FutureResult(client)); + return client; + } + + @Override + protected Client getClient(byte[] key) { + Client client = jedis.getShard(key).getClient(); + clients.add(client); + results.add(new FutureResult(client)); return client; } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/Transaction.java b/src/main/java/redis/clients/jedis/Transaction.java index 18c5f29..bca7157 100644 --- a/src/main/java/redis/clients/jedis/Transaction.java +++ b/src/main/java/redis/clients/jedis/Transaction.java @@ -1,579 +1,75 @@ package redis.clients.jedis; +import redis.clients.jedis.exceptions.JedisDataException; + +import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Set; -import redis.clients.jedis.BinaryClient.LIST_POSITION; +/** + * Transaction is nearly identical to Pipeline, only differences are the multi/discard behaviors + */ +public class Transaction extends MultiKeyPipelineBase { -public class Transaction extends BinaryTransaction { - public Transaction() { + protected boolean inTransaction = true; + + protected Transaction(){ + // client will be set later in transaction block } public Transaction(final Client client) { - super(client); + this.client = client; } - public Response append(String key, String value) { - client.append(key, value); - return getResponse(BuilderFactory.LONG); + @Override + protected Client getClient(String key) { + return client; } - public Response> blpop(String... args) { - client.blpop(args); - return getResponse(BuilderFactory.STRING_LIST); + @Override + protected Client getClient(byte[] key) { + return client; } - public Response> brpop(String... args) { - client.brpop(args); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response decr(String key) { - client.decr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response decrBy(String key, long integer) { - client.decrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response del(String... keys) { - client.del(keys); - return getResponse(BuilderFactory.LONG); - } - - public Response echo(String string) { - client.echo(string); - return getResponse(BuilderFactory.STRING); - } - - public Response exists(String key) { - client.exists(key); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response expire(String key, int seconds) { - client.expire(key, seconds); - return getResponse(BuilderFactory.LONG); - } - - public Response expireAt(String key, long unixTime) { - client.expireAt(key, unixTime); - return getResponse(BuilderFactory.LONG); - } - - public Response get(String key) { - client.get(key); - return getResponse(BuilderFactory.STRING); - } - - public Response getbit(String key, long offset) { - client.getbit(key, offset); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response getrange(String key, long startOffset, - long endOffset) { - client.getrange(key, startOffset, endOffset); - return getResponse(BuilderFactory.STRING); - } - - public Response getSet(String key, String value) { - client.getSet(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response hdel(String key, String field) { - client.hdel(key, field); - return getResponse(BuilderFactory.LONG); - } - - public Response hexists(String key, String field) { - client.hexists(key, field); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response hget(String key, String field) { - client.hget(key, field); - return getResponse(BuilderFactory.STRING); - } - - public Response> hgetAll(String key) { - client.hgetAll(key); - return getResponse(BuilderFactory.STRING_MAP); - } - - public Response hincrBy(String key, String field, long value) { - client.hincrBy(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> hkeys(String key) { - client.hkeys(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response hlen(String key) { - client.hlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> hmget(String key, String... fields) { - client.hmget(key, fields); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response hmset(String key, Map hash) { - client.hmset(key, hash); - return getResponse(BuilderFactory.STRING); - } - - public Response hset(String key, String field, String value) { - client.hset(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response hsetnx(String key, String field, String value) { - client.hsetnx(key, field, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> hvals(String key) { - client.hvals(key); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response incr(String key) { - client.incr(key); - return getResponse(BuilderFactory.LONG); - } - - public Response incrBy(String key, long integer) { - client.incrBy(key, integer); - return getResponse(BuilderFactory.LONG); - } - - public Response> keys(String pattern) { - client.keys(pattern); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response lindex(String key, int index) { - client.lindex(key, index); - return getResponse(BuilderFactory.STRING); - } - - public Response linsert(String key, LIST_POSITION where, - String pivot, String value) { - client.linsert(key, where, pivot, value); - return getResponse(BuilderFactory.LONG); - } - - public Response llen(String key) { - client.llen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response lpop(String key) { - client.lpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response lpush(String key, String string) { - client.lpush(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response lpushx(String key, String string) { - client.lpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response> lrange(String key, long start, long end) { - client.lrange(key, start, end); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response lrem(String key, long count, String value) { - client.lrem(key, count, value); - return getResponse(BuilderFactory.LONG); - } - - public Response lset(String key, long index, String value) { - client.lset(key, index, value); - return getResponse(BuilderFactory.STRING); - } - - public Response ltrim(String key, long start, long end) { - client.ltrim(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> mget(String... keys) { - client.mget(keys); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response move(String key, int dbIndex) { - client.move(key, dbIndex); - return getResponse(BuilderFactory.LONG); - } - - public Response mset(String... keysvalues) { - client.mset(keysvalues); - return getResponse(BuilderFactory.STRING); - } - - public Response msetnx(String... keysvalues) { - client.msetnx(keysvalues); - return getResponse(BuilderFactory.LONG); - } - - public Response persist(String key) { - client.persist(key); - return getResponse(BuilderFactory.LONG); - } - - public Response rename(String oldkey, String newkey) { - client.rename(oldkey, newkey); - return getResponse(BuilderFactory.STRING); - } - - public Response renamenx(String oldkey, String newkey) { - client.renamenx(oldkey, newkey); - return getResponse(BuilderFactory.LONG); - } - - public Response rpop(String key) { - client.rpop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response rpoplpush(String srckey, String dstkey) { - client.rpoplpush(srckey, dstkey); - return getResponse(BuilderFactory.STRING); - } + public List exec() { + client.exec(); + client.getAll(1); // Discard all but the last reply - public Response rpush(String key, String string) { - client.rpush(key, string); - return getResponse(BuilderFactory.LONG); + List unformatted = client.getObjectMultiBulkReply(); + if (unformatted == null) { + return null; + } + List formatted = new ArrayList(); + for (Object o : unformatted) { + try { + formatted.add(generateResponse(o).get()); + } catch (JedisDataException e) { + formatted.add(e); + } + } + return formatted; } - public Response rpushx(String key, String string) { - client.rpushx(key, string); - return getResponse(BuilderFactory.LONG); - } - - public Response sadd(String key, String member) { - client.sadd(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response scard(String key) { - client.scard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response> sdiff(String... keys) { - client.sdiff(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sdiffstore(String dstkey, String... keys) { - client.sdiffstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response set(String key, String value) { - client.set(key, value); - return getResponse(BuilderFactory.STRING); - } - - public Response setbit(String key, long offset, boolean value) { - client.setbit(key, offset, value); - return getResponse(BuilderFactory.BOOLEAN); - } + public List> execGetResponse() { + client.exec(); + client.getAll(1); // Discard all but the last reply - public Response setex(String key, int seconds, String value) { - client.setex(key, seconds, value); - return getResponse(BuilderFactory.STRING); + List unformatted = client.getObjectMultiBulkReply(); + if (unformatted == null) { + return null; + } + List> response = new ArrayList>(); + for (Object o : unformatted) { + response.add(generateResponse(o)); + } + return response; } - public Response setnx(String key, String value) { - client.setnx(key, value); - return getResponse(BuilderFactory.LONG); + public String discard() { + client.discard(); + client.getAll(1); // Discard all but the last reply + inTransaction = false; + clean(); + return client.getStatusCodeReply(); } - public Response setrange(String key, long offset, String value) { - client.setrange(key, offset, value); - return getResponse(BuilderFactory.LONG); - } - - public Response> sinter(String... keys) { - client.sinter(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sinterstore(String dstkey, String... keys) { - client.sinterstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response sismember(String key, String member) { - client.sismember(key, member); - return getResponse(BuilderFactory.BOOLEAN); - } - - public Response> smembers(String key) { - client.smembers(key); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response smove(String srckey, String dstkey, String member) { - client.smove(srckey, dstkey, member); - return getResponse(BuilderFactory.LONG); - } - - public Response> sort(String key) { - client.sort(key); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(String key, - SortingParams sortingParameters) { - client.sort(key, sortingParameters); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(String key, - SortingParams sortingParameters, String dstkey) { - client.sort(key, sortingParameters, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response> sort(String key, String dstkey) { - client.sort(key, dstkey); - return getResponse(BuilderFactory.STRING_LIST); - } - - public Response spop(String key) { - client.spop(key); - return getResponse(BuilderFactory.STRING); - } - - public Response srandmember(String key) { - client.srandmember(key); - return getResponse(BuilderFactory.STRING); - } - - public Response srem(String key, String member) { - client.srem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response strlen(String key) { - client.strlen(key); - return getResponse(BuilderFactory.LONG); - } - - public Response substr(String key, int start, int end) { - client.substr(key, start, end); - return getResponse(BuilderFactory.STRING); - } - - public Response> sunion(String... keys) { - client.sunion(keys); - return getResponse(BuilderFactory.STRING_SET); - } - - public Response sunionstore(String dstkey, String... keys) { - client.sunionstore(dstkey, keys); - return getResponse(BuilderFactory.LONG); - } - - public Response ttl(String key) { - client.ttl(key); - return getResponse(BuilderFactory.LONG); - } - - public Response type(String key) { - client.type(key); - return getResponse(BuilderFactory.STRING); - } - - public Response zadd(String key, double score, String member) { - client.zadd(key, score, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zcard(String key) { - client.zcard(key); - return getResponse(BuilderFactory.LONG); - } - - public Response zcount(String key, double min, double max) { - client.zcount(key, min, max); - return getResponse(BuilderFactory.LONG); - } - - public Response zincrby(String key, double score, String member) { - client.zincrby(key, score, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zinterstore(String dstkey, String... sets) { - client.zinterstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zinterstore(String dstkey, ZParams params, - String... sets) { - client.zinterstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrange(String key, int start, int end) { - client.zrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, double min, - double max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, String min, - String max) { - client.zrangeByScore(key, min, max); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScore(String key, double min, - double max, int offset, int count) { - client.zrangeByScore(key, min, max, offset, count); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, - double max) { - client.zrangeByScoreWithScores(key, min, max); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeByScoreWithScores(String key, double min, - double max, int offset, int count) { - client.zrangeByScoreWithScores(key, min, max, offset, count); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response> zrangeWithScores(String key, int start, int end) { - client.zrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zrank(String key, String member) { - client.zrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zrem(String key, String member) { - client.zrem(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByRank(String key, int start, int end) { - client.zremrangeByRank(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response zremrangeByScore(String key, double start, double end) { - client.zremrangeByScore(key, start, end); - return getResponse(BuilderFactory.LONG); - } - - public Response> zrevrange(String key, int start, int end) { - client.zrevrange(key, start, end); - return getResponse(BuilderFactory.STRING_ZSET); - } - - public Response> zrevrangeWithScores(String key, int start, - int end) { - client.zrevrangeWithScores(key, start, end); - return getResponse(BuilderFactory.TUPLE_ZSET); - } - - public Response zrevrank(String key, String member) { - client.zrevrank(key, member); - return getResponse(BuilderFactory.LONG); - } - - public Response zscore(String key, String member) { - client.zscore(key, member); - return getResponse(BuilderFactory.DOUBLE); - } - - public Response zunionstore(String dstkey, String... sets) { - client.zunionstore(dstkey, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response zunionstore(String dstkey, ZParams params, - String... sets) { - client.zunionstore(dstkey, params, sets); - return getResponse(BuilderFactory.LONG); - } - - public Response bgrewriteaof() { - client.bgrewriteaof(); - return getResponse(BuilderFactory.STRING); - } - - public Response bgsave() { - client.bgsave(); - return getResponse(BuilderFactory.STRING); - } - - public Response configGet(String pattern) { - client.configGet(pattern); - return getResponse(BuilderFactory.STRING); - } - - public Response configSet(String parameter, String value) { - client.configSet(parameter, value); - return getResponse(BuilderFactory.STRING); - } - - public Response brpoplpush(String source, String destination, - int timeout) { - client.brpoplpush(source, destination, timeout); - return getResponse(BuilderFactory.STRING); - } - - public Response configResetStat() { - client.configResetStat(); - return getResponse(BuilderFactory.STRING); - } - - public Response save() { - client.save(); - return getResponse(BuilderFactory.STRING); - } - - public Response lastsave() { - client.lastsave(); - return getResponse(BuilderFactory.LONG); - } - - public Response publish(String channel, String message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); - } - - public Response publish(byte[] channel, byte[] message) { - client.publish(channel, message); - return getResponse(BuilderFactory.LONG); - } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/TransactionBlock.java b/src/main/java/redis/clients/jedis/TransactionBlock.java index 87df232..e784e19 100644 --- a/src/main/java/redis/clients/jedis/TransactionBlock.java +++ b/src/main/java/redis/clients/jedis/TransactionBlock.java @@ -13,6 +13,6 @@ public abstract class TransactionBlock extends Transaction { public abstract void execute() throws JedisException; public void setClient(Client client) { - this.client = client; + this.client = client; } } diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java new file mode 100644 index 0000000..7cd8188 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java @@ -0,0 +1,68 @@ +package redis.clients.jedis.tests; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import java.util.List; +import java.util.Map; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.Jedis; + +public class JedisSentinelTest { + private static final String MASTER_NAME = "mymaster"; + + @Before + public void setup() throws InterruptedException { + Jedis j = new Jedis("localhost", 6380); + j.auth("foobared"); + j.configSet("masterauth", "foobared"); + j.slaveof("localhost", 6379); + // TODO: The sleep is to give time to the slave to synchronize with the + // master and also let know the sentinels about this new topology. We + // should find a better way to do this. + Thread.sleep(5000); + } + + @After + public void clear() { + Jedis j = new Jedis("localhost", 6380); + j.auth("foobared"); + j.slaveofNoOne(); + } + + @Test + public void sentinel() { + Jedis j = new Jedis("localhost", 26379); + List> masters = j.sentinelMasters(); + final String masterName = masters.get(0).get("name"); + + assertEquals(MASTER_NAME, masterName); + + List masterHostAndPort = j + .sentinelGetMasterAddrByName(masterName); + assertEquals("127.0.0.1", masterHostAndPort.get(0)); + assertEquals("6379", masterHostAndPort.get(1)); + + List> slaves = j.sentinelSlaves(masterName); + assertEquals("6379", slaves.get(0).get("master-port")); + + List isMasterDownByAddr = j + .sentinelIsMasterDownByAddr("127.0.0.1", 6379); + assertEquals(Long.valueOf(0), (Long) isMasterDownByAddr.get(0)); + assertFalse("?".equals(isMasterDownByAddr.get(1))); + + isMasterDownByAddr = j.sentinelIsMasterDownByAddr("127.0.0.1", 1); + assertEquals(Long.valueOf(0), (Long) isMasterDownByAddr.get(0)); + assertTrue("?".equals(isMasterDownByAddr.get(1))); + + // DO NOT RE-RUN TEST TOO FAST, RESET TAKES SOME TIME TO... RESET + assertEquals(Long.valueOf(1), j.sentinelReset(masterName)); + assertEquals(Long.valueOf(0), j.sentinelReset("woof" + masterName)); + + } +} diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java old mode 100644 new mode 100755 index 568a2cd..ffe2c9b --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -8,10 +8,7 @@ import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.tests.HostAndPortUtil.HostAndPort; import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; public class PipeliningTest extends Assert { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); @@ -100,7 +97,59 @@ public class PipeliningTest extends Assert { assertNotNull(score.get()); } - + + @Test + public void pipelineBinarySafeHashCommands() { + jedis.hset("key".getBytes(), "f1".getBytes(), "v111".getBytes()); + jedis.hset("key".getBytes(), "f22".getBytes(), "v2222".getBytes()); + + Pipeline p = jedis.pipelined(); + Response> fmap = p.hgetAll("key".getBytes()); + Response> fkeys = p.hkeys("key".getBytes()); + Response> fordered = p.hmget("key".getBytes(), "f22".getBytes(), "f1".getBytes()); + Response> fvals = p.hvals("key".getBytes()); + p.sync(); + + assertNotNull(fmap.get()); + // we have to do these strange contortions because byte[] is not a very good key + // for a java Map. It only works with equality (you need the exact key object to retrieve + // the value) I recommend we switch to using ByteBuffer or something similar: + // http://stackoverflow.com/questions/1058149/using-a-byte-array-as-hashmap-key-java + Map map = fmap.get(); + Set mapKeys = map.keySet(); + Iterator iterMap = mapKeys.iterator(); + byte[] firstMapKey = iterMap.next(); + byte[] secondMapKey = iterMap.next(); + assertFalse(iterMap.hasNext()); + verifyHasBothValues(firstMapKey, secondMapKey, "f1".getBytes(), "f22".getBytes()); + byte[] firstMapValue = map.get(firstMapKey); + byte[] secondMapValue = map.get(secondMapKey); + verifyHasBothValues(firstMapValue, secondMapValue, "v111".getBytes(), "v2222".getBytes()); + + assertNotNull(fkeys.get()); + Iterator iter = fkeys.get().iterator(); + byte[] firstKey = iter.next(); + byte[] secondKey = iter.next(); + assertFalse(iter.hasNext()); + verifyHasBothValues(firstKey, secondKey, "f1".getBytes(), "f22".getBytes()); + + assertNotNull(fordered.get()); + assertArrayEquals("v2222".getBytes(), fordered.get().get(0)); + assertArrayEquals("v111".getBytes(), fordered.get().get(1)); + + assertNotNull(fvals.get()); + assertEquals(2, fvals.get().size()); + byte[] firstValue = fvals.get().get(0); + byte[] secondValue = fvals.get().get(1); + verifyHasBothValues(firstValue, secondValue, "v111".getBytes(), "v2222".getBytes()); + } + + private void verifyHasBothValues(byte[] firstKey, byte[] secondKey, byte[] value1, byte[] value2) { + assertFalse(Arrays.equals(firstKey, secondKey)); + assertTrue(Arrays.equals(firstKey, value1) || Arrays.equals(firstKey, value2)); + assertTrue(Arrays.equals(secondKey, value1) || Arrays.equals(secondKey, value2)); + } + @Test public void pipelineSelect() { Pipeline p = jedis.pipelined(); diff --git a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java index d7df713..855a35d 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java @@ -300,7 +300,7 @@ public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { @Test public void ttl() { long ttl = jedis.ttl("foo"); - assertEquals(-1, ttl); + assertEquals(-2, ttl); jedis.set("foo", "bar"); ttl = jedis.ttl("foo"); @@ -312,7 +312,7 @@ public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { // Binary long bttl = jedis.ttl(bfoo); - assertEquals(-1, bttl); + assertEquals(-2, bttl); jedis.set(bfoo, bbar); bttl = jedis.ttl(bfoo); diff --git a/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java index 047ca20..87b044f 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/BitCommandsTest.java @@ -2,6 +2,8 @@ package redis.clients.jedis.tests.commands; import org.junit.Test; +import redis.clients.jedis.BitOP; + public class BitCommandsTest extends JedisCommandTestBase { @Test public void setAndgetbit() { @@ -29,4 +31,63 @@ public class BitCommandsTest extends JedisCommandTestBase { assertEquals("Hello", jedis.getrange("key1", 0, 4)); assertEquals("Jedis", jedis.getrange("key1", 6, 11)); } -} \ No newline at end of file + + @Test + public void bitCount() { + jedis.del("foo"); + + jedis.setbit("foo", 16, true); + jedis.setbit("foo", 24, true); + jedis.setbit("foo", 40, true); + jedis.setbit("foo", 56, true); + + long c4 = jedis.bitcount("foo"); + assertEquals(4, c4); + + long c3 = jedis.bitcount("foo", 2L, 5L); + assertEquals(3, c3); + + jedis.del("foo"); + } + + @Test + public void bitOp() + { + jedis.set("key1", "\u0060"); + jedis.set("key2", "\u0044"); + + jedis.bitop(BitOP.AND, "resultAnd", "key1", "key2"); + String resultAnd = jedis.get("resultAnd"); + assertEquals("\u0040", resultAnd); + + jedis.bitop(BitOP.OR, "resultOr", "key1", "key2"); + String resultOr = jedis.get("resultOr"); + assertEquals("\u0064", resultOr); + + jedis.bitop(BitOP.XOR, "resultXor", "key1", "key2"); + String resultXor = jedis.get("resultXor"); + assertEquals("\u0024", resultXor); + + jedis.del("resultAnd"); + jedis.del("resultOr"); + jedis.del("resultXor"); + jedis.del("key1"); + jedis.del("key2"); + } + + @Test + public void bitOpNot() + { + jedis.del("key"); + jedis.setbit("key", 0, true); + jedis.setbit("key", 4, true); + + jedis.bitop(BitOP.NOT, "resultNot", "key"); + + String resultNot = jedis.get("resultNot"); + assertEquals("\u0077", resultNot); + + jedis.del("key"); + jedis.del("resultNot"); + } +} diff --git a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java index 7e59335..fbc7d8e 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java @@ -58,6 +58,8 @@ public class ControlCommandsTest extends JedisCommandTestBase { public void info() { String info = jedis.info(); assertNotNull(info); + info = jedis.info("server"); + assertNotNull(info); } @Test diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index 0a059cd..a3675d4 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -6,133 +6,147 @@ import java.util.List; import org.junit.Test; import redis.clients.jedis.exceptions.JedisDataException; -import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.SafeEncoder; public class ScriptingCommandsTest extends JedisCommandTestBase { - + @SuppressWarnings("unchecked") - @Test + @Test public void evalMultiBulk() { - String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; - List keys = new ArrayList(); - keys.add("key1"); - keys.add("key2"); - - List args = new ArrayList(); - args.add("first"); - args.add("second"); - - List response = (List)jedis.eval(script, keys, args ); - - assertEquals(4, response.size()); - assertEquals("key1", response.get(0)); - assertEquals("key2", response.get(1)); - assertEquals("first", response.get(2)); - assertEquals("second", response.get(3)); + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; + List keys = new ArrayList(); + keys.add("key1"); + keys.add("key2"); + + List args = new ArrayList(); + args.add("first"); + args.add("second"); + + List response = (List) jedis.eval(script, keys, args); + + assertEquals(4, response.size()); + assertEquals("key1", response.get(0)); + assertEquals("key2", response.get(1)); + assertEquals("first", response.get(2)); + assertEquals("second", response.get(3)); } - - @Test + + @Test public void evalBulk() { - String script = "return KEYS[1]"; - List keys = new ArrayList(); - keys.add("key1"); - - List args = new ArrayList(); - args.add("first"); - - String response = (String)jedis.eval(script, keys, args); - - assertEquals("key1", response); + String script = "return KEYS[1]"; + List keys = new ArrayList(); + keys.add("key1"); + + List args = new ArrayList(); + args.add("first"); + + String response = (String) jedis.eval(script, keys, args); + + assertEquals("key1", response); } - - @Test + + @Test public void evalInt() { - String script = "return 2"; - List keys = new ArrayList(); - keys.add("key1"); - - Long response = (Long)jedis.eval(script, keys, new ArrayList()); - - assertEquals(new Long(2), response); + String script = "return 2"; + List keys = new ArrayList(); + keys.add("key1"); + + Long response = (Long) jedis + .eval(script, keys, new ArrayList()); + + assertEquals(new Long(2), response); } - - @Test + + @Test public void evalNoArgs() { - String script = "return KEYS[1]"; - List keys = new ArrayList(); - keys.add("key1"); - String response = (String)jedis.eval(script, keys, new ArrayList()); - - assertEquals("key1", response); + String script = "return KEYS[1]"; + List keys = new ArrayList(); + keys.add("key1"); + String response = (String) jedis.eval(script, keys, + new ArrayList()); + + assertEquals("key1", response); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void evalsha() { - jedis.set("foo", "bar"); - jedis.eval("return redis.call('get','foo')"); - String result = (String)jedis.evalsha("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"); - - assertEquals("bar", result); + jedis.set("foo", "bar"); + jedis.eval("return redis.call('get','foo')"); + String result = (String) jedis + .evalsha("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"); + + assertEquals("bar", result); } - - @SuppressWarnings("unchecked") - @Test(expected=JedisDataException.class) + + @Test(expected = JedisDataException.class) public void evalshaShaNotFound() { - jedis.evalsha("ffffffffffffffffffffffffffffffffffffffff"); + jedis.evalsha("ffffffffffffffffffffffffffffffffffffffff"); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptFlush() { - jedis.set("foo", "bar"); - jedis.eval("return redis.call('get','foo')"); - jedis.scriptFlush(); - assertFalse(jedis.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + jedis.set("foo", "bar"); + jedis.eval("return redis.call('get','foo')"); + jedis.scriptFlush(); + assertFalse(jedis + .scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptExists() { - jedis.scriptLoad("return redis.call('get','foo')"); - List exists = jedis.scriptExists("ffffffffffffffffffffffffffffffffffffffff","6b1bf486c81ceb7edf3c093f4c48582e38c0e791"); - assertFalse(exists.get(0)); - assertTrue(exists.get(1)); + jedis.scriptLoad("return redis.call('get','foo')"); + List exists = jedis.scriptExists( + "ffffffffffffffffffffffffffffffffffffffff", + "6b1bf486c81ceb7edf3c093f4c48582e38c0e791"); + assertFalse(exists.get(0)); + assertTrue(exists.get(1)); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptExistsBinary() { - jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')")); - List exists = jedis.scriptExists(SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff"),SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); - assertEquals(new Long(0), exists.get(0)); - assertEquals(new Long(1), exists.get(1)); + jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')")); + List exists = jedis.scriptExists( + SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff"), + SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + assertEquals(new Long(0), exists.get(0)); + assertEquals(new Long(1), exists.get(1)); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptLoad() { - jedis.scriptLoad("return redis.call('get','foo')"); - assertTrue(jedis.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + jedis.scriptLoad("return redis.call('get','foo')"); + assertTrue(jedis + .scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptLoadBinary() { - jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')")); - List exists = jedis.scriptExists(SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); - assertEquals(new Long(1), exists.get(0)); + jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')")); + List exists = jedis.scriptExists(SafeEncoder + .encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + assertEquals(new Long(1), exists.get(0)); } - - @SuppressWarnings("unchecked") - @Test + + @Test public void scriptKill() { - try { - jedis.scriptKill(); - } - catch(JedisDataException e) { - assertTrue(e.getMessage().contains("No scripts in execution right now.")); - } + try { + jedis.scriptKill(); + } catch (JedisDataException e) { + assertTrue(e.getMessage().contains( + "No scripts in execution right now.")); } + } + + @Test + public void scriptEvalReturnNullValues() { + String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; + jedis.eval(script, 2, "key1", "key2", "1", "1"); + } + + @Test + public void scriptEvalShaReturnNullValues() { + String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; + String sha = jedis.scriptLoad(script); + jedis.evalsha(sha, 2, "key1", "key2", "1", "1"); + } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java index 8167658..5e03270 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java @@ -171,7 +171,7 @@ public class TransactionCommandsTest extends JedisCommandTestBase { t.set(bmykey, bval); resp = t.exec(); assertEquals(1, resp.size()); - assertArrayEquals("OK".getBytes(), (byte[]) resp.get(0)); + assertEquals("OK", resp.get(0)); } @Test(expected = JedisDataException.class)