Object commands are supported

This commit is contained in:
ivowiblo
2012-04-19 00:32:23 -04:00
parent be163acd52
commit d102ccf1b9
9 changed files with 136 additions and 3 deletions

View File

@@ -6,6 +6,9 @@ import static redis.clients.jedis.Protocol.Keyword.LIMIT;
import static redis.clients.jedis.Protocol.Keyword.NO;
import static redis.clients.jedis.Protocol.Keyword.ONE;
import static redis.clients.jedis.Protocol.Keyword.STORE;
import static redis.clients.jedis.Protocol.Keyword.REFCOUNT;
import static redis.clients.jedis.Protocol.Keyword.ENCODING;
import static redis.clients.jedis.Protocol.Keyword.IDLETIME;
import static redis.clients.jedis.Protocol.Keyword.WITHSCORES;
import java.util.ArrayList;
@@ -718,4 +721,16 @@ public class BinaryClient extends Connection {
db = 0;
super.disconnect();
}
public void objectRefcount(byte[] key) {
sendCommand(OBJECT, REFCOUNT.raw, key);
}
public void objectIdletime(byte[] key) {
sendCommand(OBJECT, IDLETIME.raw, key);
}
public void objectEncoding(byte[] key) {
sendCommand(OBJECT, ENCODING.raw, key);
}
}

View File

@@ -3006,4 +3006,19 @@ public class BinaryJedis implements BinaryJedisCommands {
public Long getDB() {
return client.getDB();
}
public Long objectRefcount(byte[] key) {
client.objectRefcount(key);
return client.getIntegerReply();
}
public byte[] objectEncoding(byte[] key) {
client.objectEncoding(key);
return client.getBinaryBulkReply();
}
public Long objectIdletime(byte[] key) {
client.objectIdletime(key);
return client.getIntegerReply();
}
}

View File

@@ -154,4 +154,10 @@ public interface BinaryJedisCommands {
Long zremrangeByScore(byte[] key, double start, double end);
Long linsert(byte[] key, LIST_POSITION where, byte[] pivot, byte[] value);
Long objectRefcount(byte[] key);
Long objectIdletime(byte[] key);
byte[] objectEncoding(byte[] key);
}

View File

@@ -407,4 +407,19 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
pipeline.setShardedJedis(this);
return pipeline;
}
public Long objectRefcount(byte[] key) {
Jedis j = getShard(key);
return j.objectRefcount(key);
}
public byte[] objectEncoding(byte[] key) {
Jedis j = getShard(key);
return j.objectEncoding(key);
}
public Long objectIdletime(byte[] key) {
Jedis j = getShard(key);
return j.objectIdletime(key);
}
}

View File

@@ -595,4 +595,16 @@ public class Client extends BinaryClient implements Commands {
public void configGet(String pattern) {
configGet(SafeEncoder.encode(pattern));
}
public void objectRefcount(String key) {
objectRefcount(SafeEncoder.encode(key));
}
public void objectIdletime(String key) {
objectIdletime(SafeEncoder.encode(key));
}
public void objectEncoding(String key) {
objectEncoding(SafeEncoder.encode(key));
}
}

View File

@@ -3,6 +3,7 @@ package redis.clients.jedis;
import java.util.Map;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.util.SafeEncoder;
public interface Commands {
@@ -259,4 +260,10 @@ public interface Commands {
public void exec();
public void discard();
public void objectRefcount(String key);
public void objectIdletime(String key);
public void objectEncoding(String key);
}

View File

@@ -2688,5 +2688,20 @@ public class Jedis extends BinaryJedis implements JedisCommands {
public String configSet(final String parameter, final String value) {
client.configSet(parameter, value);
return client.getStatusCodeReply();
}
}
public Long objectRefcount(String string) {
client.objectRefcount(string);
return client.getIntegerReply();
}
public String objectEncoding(String string) {
client.objectEncoding(string);
return client.getBulkReply();
}
public Long objectIdletime(String string) {
client.objectIdletime(string);
return client.getIntegerReply();
}
}

View File

@@ -140,7 +140,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;
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, OBJECT;
public final byte[] raw;
@@ -150,7 +150,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;
AGGREGATE, ALPHA, ASC, BY, DESC, GET, LIMIT, MESSAGE, NO, NOSORT, PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, OK, ONE, QUEUED, SET, STORE, SUBSCRIBE, UNSUBSCRIBE, WEIGHTS, WITHSCORES, RESETSTAT, REFCOUNT, ENCODING, IDLETIME;
public final byte[] raw;
Keyword() {

View File

@@ -0,0 +1,48 @@
package redis.clients.jedis.tests.commands;
import org.junit.Test;
import redis.clients.util.SafeEncoder;
public class ObjectCommandsTest extends JedisCommandTestBase {
private String key = "key";
private byte[] binaryKey = SafeEncoder.encode(key);
@Test
public void objectRefcount() {
jedis.set(key, "test");
Long refcount = jedis.objectRefcount(key);
assertEquals(new Long(1), refcount);
//Binary
refcount = jedis.objectRefcount(binaryKey);
assertEquals(new Long(1), refcount);
}
@Test
public void objectEncoding() {
jedis.set(key, "test");
String encoding = jedis.objectEncoding(key);
assertEquals("raw", encoding);
//Binary
encoding = SafeEncoder.encode(jedis.objectEncoding(binaryKey));
assertEquals("raw", encoding);
}
@Test
public void objectIdletime() throws InterruptedException {
jedis.set(key, "test");
//Wait a little bit more than 10 seconds so the idle time is 10 seconds.
Thread.sleep(10001);
Long time = jedis.objectIdletime(key);
assertEquals(new Long(10), time);
//Binary
time = jedis.objectIdletime(binaryKey);
assertEquals(new Long(10), time);
}
}