diff --git a/src/main/java/redis/clients/jedis/BasicCommands.java b/src/main/java/redis/clients/jedis/BasicCommands.java index 482d43b..5b7e995 100644 --- a/src/main/java/redis/clients/jedis/BasicCommands.java +++ b/src/main/java/redis/clients/jedis/BasicCommands.java @@ -39,4 +39,6 @@ public interface BasicCommands { String debug(DebugParams params); String configResetStat(); + + Long waitReplicas(int replicas, long timeout); } diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 428fe72..dff1e76 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -1131,4 +1131,8 @@ public class BinaryClient extends Connection { args.addAll(params.getParams()); sendCommand(ZSCAN, args.toArray(new byte[args.size()][])); } + + public void waitReplicas(int replicas, long timeout) { + sendCommand(WAIT, toByteArray(replicas), toByteArray(timeout)); + } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 597e305..92a99a2 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -3366,4 +3366,17 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey return (relpy != null ? new Double(relpy) : null); } + /** + * Syncrhonous replication of Redis as described here: + * http://antirez.com/news/66 + * + * Since Java Object class has implemented "wait" method, we cannot use it, + * so I had to change the name of the method. Sorry :S + */ + public Long waitReplicas(int replicas, long timeout) { + checkIsInMulti(); + client.waitReplicas(replicas, timeout); + return client.getIntegerReply(); + } + } diff --git a/src/main/java/redis/clients/jedis/Commands.java b/src/main/java/redis/clients/jedis/Commands.java index 898dcdd..e4e22ec 100644 --- a/src/main/java/redis/clients/jedis/Commands.java +++ b/src/main/java/redis/clients/jedis/Commands.java @@ -1,14 +1,15 @@ package redis.clients.jedis; -import redis.clients.jedis.BinaryClient.LIST_POSITION; - import java.util.Map; +import redis.clients.jedis.BinaryClient.LIST_POSITION; + public interface Commands { public void set(final String key, final String value); - public void set(final String key, final String value, final String nxxx, final String expx, final long time); + public void set(final String key, final String value, final String nxxx, + final String expx, final long time); public void get(final String key); @@ -295,12 +296,14 @@ public interface Commands { public void bitcount(final String key, long start, long end); public void bitop(BitOP op, final String destKey, String... srcKeys); - + public void scan(int cursor, final ScanParams params); - + public void hscan(final String key, int cursor, final ScanParams params); - + public void sscan(final String key, int cursor, final ScanParams params); - + public void zscan(final String key, int cursor, final ScanParams params); + + public void waitReplicas(int replicas, long timeout); } diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 200632a..4ef5c4f 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -14,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, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands { +public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands, BasicCommands { public Jedis(final String host) { super(host); } diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index 5eca2c5..354d158 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -158,7 +158,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, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, 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, - DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN; + DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT; public final byte[] raw; 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 00612bb..832cd6c 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java @@ -112,4 +112,10 @@ public class ControlCommandsTest extends JedisCommandTestBase { resp = jedis.debug(DebugParams.RELOAD()); assertNotNull(resp); } + + @Test + public void waitReplicas() { + Long replicas = jedis.waitReplicas(1, 100); + assertEquals(1, replicas.longValue()); + } } \ No newline at end of file