From 8b3ea5f2de1e33229b0c08dd4180ae7ba578eeb6 Mon Sep 17 00:00:00 2001 From: mindwind Date: Sat, 29 Jun 2013 14:17:44 +0800 Subject: [PATCH] new - dump and restore command --- .../java/redis/clients/jedis/BinaryClient.java | 8 ++++++++ .../java/redis/clients/jedis/BinaryJedis.java | 12 ++++++++++++ src/main/java/redis/clients/jedis/Client.java | 9 +++++++++ src/main/java/redis/clients/jedis/Jedis.java | 15 +++++++++++++-- src/main/java/redis/clients/jedis/Protocol.java | 2 +- src/main/java/redis/clients/util/SafeEncoder.java | 2 -- .../commands/AllKindOfValuesCommandsTest.java | 8 ++++++++ .../tests/commands/JedisCommandTestBase.java | 4 ++++ 8 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 81c0c2f..f545531 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -102,6 +102,14 @@ public class BinaryClient extends Connection { public void del(final byte[]... keys) { sendCommand(DEL, keys); } + + public void dump(final byte[] key) { + sendCommand(DUMP, key); + } + + public void restore(final byte[] key, final int ttl, final byte[] serializedValue) { + sendCommand(RESTORE, key, toByteArray(ttl), serializedValue); + } public void type(final byte[] key) { sendCommand(TYPE, key); diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 4c65974..b257a2a 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -3238,4 +3238,16 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey client.bitop(op, destKey, srcKeys); return client.getIntegerReply(); } + + public byte[] dump(final byte[] key) { + checkIsInMulti(); + client.dump(key); + return client.getBinaryBulkReply(); + } + + public String restore(final byte[] key, final int ttl, final byte[] serializedValue) { + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); + } } diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index a647a20..c88d134 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -732,4 +732,13 @@ public class Client extends BinaryClient implements Commands { sentinel(SafeEncoder.encode(cmd), SafeEncoder.encode(arg1), toByteArray(arg2)); } + + public void dump(final String key) { + dump(SafeEncoder.encode(key)); + } + + public void restore(final String key, final int ttl, final byte[] serializedValue) { + restore(SafeEncoder.encode(key), ttl, serializedValue); + } + } diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index b717fb2..c9c6887 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -100,8 +100,8 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public Long del(String key) { - client.del(key); - return client.getIntegerReply(); + client.del(key); + return client.getIntegerReply(); } /** @@ -3002,4 +3002,15 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand BuilderFactory.STRING.build(reply.get(1))); } + public byte[] dump(final String key) { + checkIsInMulti(); + client.dump(key); + return client.getBinaryBulkReply(); + } + + public String restore(final String key, final int ttl, final byte[] serializedValue) { + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); + } } diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index f0e5585..2ac77bc 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -154,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, 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; + PING, SET, GET, QUIT, EXISTS, DEL, DUMP, RESTORE, 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; public final byte[] raw; diff --git a/src/main/java/redis/clients/util/SafeEncoder.java b/src/main/java/redis/clients/util/SafeEncoder.java index d63fe0b..a00e6c4 100644 --- a/src/main/java/redis/clients/util/SafeEncoder.java +++ b/src/main/java/redis/clients/util/SafeEncoder.java @@ -1,8 +1,6 @@ package redis.clients.util; import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; import redis.clients.jedis.Protocol; import redis.clients.jedis.exceptions.JedisDataException; 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 855a35d..03fb17e 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java @@ -103,6 +103,14 @@ public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { reply = jedis.del(bfoo1, bfoo2); assertEquals(0, reply); } + + @Test + public void dumpAndRestore() { + jedis.set("foo1", "bar1"); + byte[] sv = jedis.dump("foo1"); + jedis.restore("foo2", 0, sv); + assertTrue(jedis.exists("foo2")); + } @Test public void type() { diff --git a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java index c88b388..df10cb5 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java +++ b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java @@ -27,7 +27,11 @@ public abstract class JedisCommandTestBase extends JedisTestBase { public void setUp() throws Exception { jedis = new Jedis(hnp.host, hnp.port, 500); jedis.connect(); + try { jedis.auth("foobared"); + } catch (Exception e) { + // ignore + } jedis.configSet("timeout", "300"); jedis.flushAll(); }