From e7a88a49e9838fa6d47c5a7260e23195246a546e Mon Sep 17 00:00:00 2001 From: mindwind Date: Sat, 29 Jun 2013 15:13:21 +0800 Subject: [PATCH] new - pexpire, pexpireat and pttl command --- .../redis/clients/jedis/BinaryClient.java | 30 +++++++---- .../java/redis/clients/jedis/BinaryJedis.java | 30 ++++++++--- src/main/java/redis/clients/jedis/Client.java | 16 +++++- src/main/java/redis/clients/jedis/Jedis.java | 30 ++++++++--- .../java/redis/clients/jedis/Protocol.java | 3 +- .../commands/AllKindOfValuesCommandsTest.java | 53 ++++++++++++++++--- 6 files changed, 130 insertions(+), 32 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index f545531..3383848 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -102,14 +102,6 @@ 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); @@ -870,6 +862,26 @@ public class BinaryClient extends Connection { } public void sentinel(final byte[]... args) { - sendCommand(SENTINEL, args); + sendCommand(SENTINEL, args); + } + + 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 pexpire(final byte[] key, final int milliseconds) { + sendCommand(PEXPIRE, key, toByteArray(milliseconds)); + } + + public void pexpireAt(final byte[] key, long millisecondsTimestamp) { + sendCommand(PEXPIREAT, key, toByteArray(millisecondsTimestamp)); + } + + public void pttl(final byte[] key) { + sendCommand(PTTL, key); } } diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index b257a2a..465f118 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -3240,14 +3240,32 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public byte[] dump(final byte[] key) { - checkIsInMulti(); - client.dump(key); - return client.getBinaryBulkReply(); + 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(); + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); + } + + public Long pexpire(final byte[] key, final int milliseconds) { + checkIsInMulti(); + client.pexpire(key, milliseconds); + return client.getIntegerReply(); + } + + public Long pexpireAt(final byte[] key, final long millisecondsTimestamp) { + checkIsInMulti(); + client.pexpireAt(key, millisecondsTimestamp); + return client.getIntegerReply(); + } + + public Long pttl(final byte[] key) { + checkIsInMulti(); + client.pttl(key); + return client.getIntegerReply(); } } diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index c88d134..a268158 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -734,11 +734,23 @@ public class Client extends BinaryClient implements Commands { } public void dump(final String key) { - dump(SafeEncoder.encode(key)); + dump(SafeEncoder.encode(key)); } public void restore(final String key, final int ttl, final byte[] serializedValue) { - restore(SafeEncoder.encode(key), ttl, serializedValue); + restore(SafeEncoder.encode(key), ttl, serializedValue); + } + + public void pexpire(final String key, final int milliseconds) { + pexpire(SafeEncoder.encode(key), milliseconds); + } + + public void pexpireAt(final String key, final long millisecondsTimestamp) { + pexpireAt(SafeEncoder.encode(key), millisecondsTimestamp); + } + + public void pttl(final String key) { + pttl(SafeEncoder.encode(key)); } } diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index c9c6887..fe0f7ab 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -3003,14 +3003,32 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } public byte[] dump(final String key) { - checkIsInMulti(); - client.dump(key); - return client.getBinaryBulkReply(); + 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(); + checkIsInMulti(); + client.restore(key, ttl, serializedValue); + return client.getStatusCodeReply(); + } + + public Long pexpire(final String key, final int milliseconds) { + checkIsInMulti(); + client.pexpire(key, milliseconds); + return client.getIntegerReply(); + } + + public Long pexpireAt(final String key, final long millisecondsTimestamp) { + checkIsInMulti(); + client.pexpireAt(key, millisecondsTimestamp); + return client.getIntegerReply(); + } + + public Long pttl(final String key) { + checkIsInMulti(); + client.pttl(key); + return client.getIntegerReply(); } } diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index 2ac77bc..b074a33 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -154,7 +154,8 @@ public final class Protocol { } public static enum Command { - 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; + 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; public final byte[] raw; 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 03fb17e..390d7ff 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/AllKindOfValuesCommandsTest.java @@ -103,14 +103,6 @@ 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() { @@ -465,5 +457,50 @@ public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { byte[] bresult = jedis.echo(SafeEncoder.encode("hello world")); assertArrayEquals(SafeEncoder.encode("hello world"), bresult); } + + @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 pexpire() { + long status = jedis.pexpire("foo", 10000); + assertEquals(0, status); + + jedis.set("foo", "bar"); + status = jedis.pexpire("foo", 10000); + assertEquals(1, status); + } + + @Test + public void pexpireAt() { + long unixTime = (System.currentTimeMillis()) + 10000; + + long status = jedis.pexpireAt("foo", unixTime); + assertEquals(0, status); + + jedis.set("foo", "bar"); + unixTime = (System.currentTimeMillis()) + 10000; + status = jedis.pexpireAt("foo", unixTime); + assertEquals(1, status); + } + + @Test + public void pttl() { + long pttl = jedis.pttl("foo"); + assertEquals(-1, pttl); + + jedis.set("foo", "bar"); + pttl = jedis.pttl("foo"); + assertEquals(-1, pttl); + + jedis.pexpire("foo", 20000); + pttl = jedis.pttl("foo"); + assertTrue(pttl >= 0 && pttl <= 20000); + } } \ No newline at end of file