Merge branch 'master' of https://github.com/xetorthio/jedis into Cleaning

This commit is contained in:
Dario Guzik
2011-05-13 18:03:44 -03:00
41 changed files with 2756 additions and 1617 deletions

View File

@@ -28,6 +28,10 @@ public class BinaryClient extends Connection {
private boolean isInMulti;
private String password;
private long db;
public boolean isInMulti() {
return isInMulti;
}
@@ -40,6 +44,21 @@ public class BinaryClient extends Connection {
super(host, port);
}
public void setPassword(final String password) {
this.password = password;
}
@Override
public void connect() {
if (!isConnected()) {
super.connect();
if (password != null) {
sendCommand(AUTH, password);
getStatusCodeReply();
}
}
}
public void ping() {
sendCommand(PING);
}
@@ -53,6 +72,7 @@ public class BinaryClient extends Connection {
}
public void quit() {
db = 0;
sendCommand(QUIT);
}
@@ -105,6 +125,7 @@ public class BinaryClient extends Connection {
}
public void select(final int index) {
db = index;
sendCommand(SELECT, toByteArray(index));
}
@@ -234,23 +255,23 @@ public class BinaryClient extends Connection {
sendCommand(LLEN, key);
}
public void lrange(final byte[] key, final int start, final int end) {
public void lrange(final byte[] key, final long start, final long end) {
sendCommand(LRANGE, key, toByteArray(start), toByteArray(end));
}
public void ltrim(final byte[] key, final int start, final int end) {
public void ltrim(final byte[] key, final long start, final long end) {
sendCommand(LTRIM, key, toByteArray(start), toByteArray(end));
}
public void lindex(final byte[] key, final int index) {
public void lindex(final byte[] key, final long index) {
sendCommand(LINDEX, key, toByteArray(index));
}
public void lset(final byte[] key, final int index, final byte[] value) {
public void lset(final byte[] key, final long index, final byte[] value) {
sendCommand(LSET, key, toByteArray(index), value);
}
public void lrem(final byte[] key, int count, final byte[] value) {
public void lrem(final byte[] key, long count, final byte[] value) {
sendCommand(LREM, key, toByteArray(count), value);
}
@@ -438,6 +459,7 @@ public class BinaryClient extends Connection {
}
public void auth(final String password) {
setPassword(password);
sendCommand(AUTH, password);
}
@@ -478,23 +500,45 @@ public class BinaryClient extends Connection {
sendCommand(ZRANGEBYSCORE, key, toByteArray(min), toByteArray(max));
}
public void zrevrangeByScore(final byte[] key, final double max,
final double min) {
sendCommand(ZREVRANGEBYSCORE, key, toByteArray(max), toByteArray(min));
}
public void zrangeByScore(final byte[] key, final byte[] min,
final byte[] max) {
sendCommand(ZRANGEBYSCORE, key, min, max);
}
public void zrevrangeByScore(final byte[] key, final byte[] max,
final byte[] min) {
sendCommand(ZREVRANGEBYSCORE, key, max, min);
}
public void zrangeByScore(final byte[] key, final double min,
final double max, final int offset, int count) {
sendCommand(ZRANGEBYSCORE, key, toByteArray(min), toByteArray(max),
LIMIT.raw, toByteArray(offset), toByteArray(count));
}
public void zrevrangeByScore(final byte[] key, final double max,
final double min, final int offset, int count) {
sendCommand(ZREVRANGEBYSCORE, key, toByteArray(max), toByteArray(min),
LIMIT.raw, toByteArray(offset), toByteArray(count));
}
public void zrangeByScoreWithScores(final byte[] key, final double min,
final double max) {
sendCommand(ZRANGEBYSCORE, key, toByteArray(min), toByteArray(max),
WITHSCORES.raw);
}
public void zrevrangeByScoreWithScores(final byte[] key, final double max,
final double min) {
sendCommand(ZREVRANGEBYSCORE, key, toByteArray(max), toByteArray(min),
WITHSCORES.raw);
}
public void zrangeByScoreWithScores(final byte[] key, final double min,
final double max, final int offset, final int count) {
sendCommand(ZRANGEBYSCORE, key, toByteArray(min), toByteArray(max),
@@ -502,6 +546,13 @@ public class BinaryClient extends Connection {
WITHSCORES.raw);
}
public void zrevrangeByScoreWithScores(final byte[] key, final double max,
final double min, final int offset, final int count) {
sendCommand(ZREVRANGEBYSCORE, key, toByteArray(max), toByteArray(min),
LIMIT.raw, toByteArray(offset), toByteArray(count),
WITHSCORES.raw);
}
public void zremrangeByRank(final byte[] key, final int start, final int end) {
sendCommand(ZREMRANGEBYRANK, key, toByteArray(start), toByteArray(end));
}
@@ -650,6 +701,16 @@ public class BinaryClient extends Connection {
}
public void getrange(byte[] key, long startOffset, long endOffset) {
sendCommand(GETRANGE, key, toByteArray(startOffset), toByteArray(endOffset));
sendCommand(GETRANGE, key, toByteArray(startOffset),
toByteArray(endOffset));
}
}
public Long getDB() {
return db;
}
public void disconnect() {
db = 0;
super.disconnect();
}
}

View File

@@ -1,7 +1,5 @@
package redis.clients.jedis;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -11,13 +9,13 @@ import java.util.Map;
import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.exceptions.JedisException;
import redis.clients.util.JedisByteHashMap;
import redis.clients.util.SafeEncoder;
public class BinaryJedis implements BinaryJedisCommands {
protected Client client = null;
protected String password = null;
public BinaryJedis(final String host) {
client = new Client(host);
@@ -35,7 +33,7 @@ public class BinaryJedis implements BinaryJedisCommands {
public BinaryJedis(final JedisShardInfo shardInfo) {
client = new Client(shardInfo.getHost(), shardInfo.getPort());
client.setTimeout(shardInfo.getTimeout());
this.password = shardInfo.getPassword();
client.setPassword(shardInfo.getPassword());
}
public String ping() {
@@ -79,9 +77,10 @@ public class BinaryJedis implements BinaryJedisCommands {
/**
* Ask the server to silently close the connection.
*/
public void quit() {
public String quit() {
checkIsInMulti();
client.quit();
return client.getStatusCodeReply();
}
/**
@@ -1649,16 +1648,16 @@ public class BinaryJedis implements BinaryJedisCommands {
protected void checkIsInMulti() {
if (client.isInMulti()) {
throw new JedisException(
throw new JedisDataException(
"Cannot use Jedis when in Multi. Please use JedisTransaction instead.");
}
}
public void connect() throws UnknownHostException, IOException {
public void connect() {
client.connect();
}
public void disconnect() throws IOException {
public void disconnect() {
client.disconnect();
}
@@ -2019,11 +2018,13 @@ public class BinaryJedis implements BinaryJedisCommands {
public List<Object> pipelined(final PipelineBlock jedisPipeline) {
jedisPipeline.setClient(client);
jedisPipeline.execute();
return client.getAll();
return jedisPipeline.sync();
}
public Pipeline pipelined() {
return new Pipeline(client);
Pipeline pipeline = new Pipeline();
pipeline.setClient(client);
return pipeline;
}
public void subscribe(final JedisPubSub jedisPubSub,
@@ -2326,6 +2327,44 @@ public class BinaryJedis implements BinaryJedisCommands {
return set;
}
public Set<byte[]> zrevrangeByScore(final byte[] key, final double max,
final double min) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min);
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
}
public Set<byte[]> zrevrangeByScore(final byte[] key, final byte[] max,
final byte[] min) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min);
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
}
public Set<byte[]> zrevrangeByScore(final byte[] key, final double max,
final double min, final int offset, final int count) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min, offset, count);
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
}
public Set<Tuple> zrevrangeByScoreWithScores(final byte[] key,
final double max, final double min) {
checkIsInMulti();
client.zrevrangeByScoreWithScores(key, max, min);
Set<Tuple> set = getBinaryTupledSet();
return set;
}
public Set<Tuple> zrevrangeByScoreWithScores(final byte[] key,
final double max, final double min, final int offset,
final int count) {
checkIsInMulti();
client.zrevrangeByScoreWithScores(key, max, min, offset, count);
Set<Tuple> set = getBinaryTupledSet();
return set;
}
/**
* Remove all elements in the sorted set at key with rank between start and
* end. Start and end are 0-based with rank 0 being the element with the
@@ -2898,7 +2937,10 @@ public class BinaryJedis implements BinaryJedisCommands {
*/
public byte[] brpoplpush(byte[] source, byte[] destination, int timeout) {
client.brpoplpush(source, destination, timeout);
return client.getBinaryBulkReply();
client.setTimeoutInfinite();
byte[] reply = client.getBinaryBulkReply();
client.rollbackTimeout();
return reply;
}
/**
@@ -2952,4 +2994,8 @@ public class BinaryJedis implements BinaryJedisCommands {
jedisPubSub.proceedWithPatterns(client, patterns);
client.rollbackTimeout();
}
public Long getDB() {
return client.getDB();
}
}

View File

@@ -139,6 +139,16 @@ public interface BinaryJedisCommands {
Set<Tuple> zrangeByScoreWithScores(byte[] key, double min, double max,
int offset, int count);
Set<byte[]> zrevrangeByScore(byte[] key, double max, double min);
Set<byte[]> zrevrangeByScore(byte[] key, double max, double min, int offset,
int count);
Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max, double min);
Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max, double min,
int offset, int count);
Long zremrangeByRank(byte[] key, int start, int end);
Long zremrangeByScore(byte[] key, double start, double end);

View File

@@ -357,6 +357,28 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
return j.zrangeByScoreWithScores(key, min, max, offset, count);
}
public Set<byte[]> zrevrangeByScore(byte[] key, double max, double min) {
Jedis j = getShard(key);
return j.zrevrangeByScore(key, max, min);
}
public Set<byte[]> zrevrangeByScore(byte[] key, double max, double min,
int offset, int count) {
Jedis j = getShard(key);
return j.zrevrangeByScore(key, max, min, offset, count);
}
public Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max, double min) {
Jedis j = getShard(key);
return j.zrevrangeByScoreWithScores(key, max, min);
}
public Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max,
double min, int offset, int count) {
Jedis j = getShard(key);
return j.zrevrangeByScoreWithScores(key, max, min, offset, count);
}
public Long zremrangeByRank(byte[] key, int start, int end) {
Jedis j = getShard(key);
return j.zremrangeByRank(key, start, end);

View File

@@ -1,11 +1,13 @@
package redis.clients.jedis;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
public class BinaryTransaction {
public class BinaryTransaction extends Queable {
protected Client client = null;
protected boolean inTransaction = true;
@@ -16,363 +18,533 @@ public class BinaryTransaction {
this.client = client;
}
public void ping() {
client.ping();
}
public void set(final byte[] key, final byte[] value) {
client.set(key, value);
}
public void get(final byte[] key) {
client.get(key);
}
public void exists(final byte[] key) {
client.exists(key);
}
public void del(final byte[]... keys) {
client.del(keys);
}
public void type(final byte[] key) {
client.type(key);
}
public void flushDB() {
client.flushDB();
}
public void keys(final byte[] pattern) {
client.keys(pattern);
}
public void randomBinaryKey() {
client.randomKey();
}
public void rename(final byte[] oldkey, final byte[] newkey) {
client.rename(oldkey, newkey);
}
public void renamenx(final byte[] oldkey, final byte[] newkey) {
client.renamenx(oldkey, newkey);
}
public void dbSize() {
client.dbSize();
}
public void expire(final byte[] key, final int seconds) {
client.expire(key, seconds);
}
public void expireAt(final byte[] key, final long unixTime) {
client.expireAt(key, unixTime);
}
public void ttl(final byte[] key) {
client.ttl(key);
}
public void select(final int index) {
client.select(index);
}
public void move(final byte[] key, final int dbIndex) {
client.move(key, dbIndex);
}
public void flushAll() {
client.flushAll();
}
public void getSet(final byte[] key, final byte[] value) {
client.getSet(key, value);
}
public void mget(final byte[]... keys) {
client.mget(keys);
}
public void setnx(final byte[] key, final byte[] value) {
client.setnx(key, value);
}
public void setex(final byte[] key, final int seconds, final byte[] value) {
client.setex(key, seconds, value);
}
public void mset(final byte[]... keysvalues) {
client.mset(keysvalues);
}
public void msetnx(final byte[]... keysvalues) {
client.msetnx(keysvalues);
}
public void decrBy(final byte[] key, final int integer) {
client.decrBy(key, integer);
}
public void decr(final byte[] key) {
client.decr(key);
}
public void incrBy(final byte[] key, final int integer) {
client.incrBy(key, integer);
}
public void incr(final byte[] key) {
client.incr(key);
}
public void append(final byte[] key, final byte[] value) {
client.append(key, value);
}
public void substr(final byte[] key, final int start, final int end) {
client.substr(key, start, end);
}
public void hset(final byte[] key, final byte[] field, final byte[] value) {
client.hset(key, field, value);
}
public void hget(final byte[] key, final byte[] field) {
client.hget(key, field);
}
public void hsetnx(final byte[] key, final byte[] field,
final byte[] value) {
client.hsetnx(key, field, value);
}
public void hmset(final byte[] key, final Map<byte[], byte[]> hash) {
client.hmset(key, hash);
}
public void hmget(final byte[] key, final byte[]... fields) {
client.hmget(key, fields);
}
public void hincrBy(final byte[] key, final byte[] field, final int value) {
client.hincrBy(key, field, value);
}
public void hexists(final byte[] key, final byte[] field) {
client.hexists(key, field);
}
public void hdel(final byte[] key, final byte[] field) {
client.hdel(key, field);
}
public void hlen(final byte[] key) {
client.hlen(key);
}
public void hkeys(final byte[] key) {
client.hkeys(key);
}
public void hvals(final byte[] key) {
client.hvals(key);
}
public void hgetAll(final byte[] key) {
client.hgetAll(key);
}
public void rpush(final byte[] key, final byte[] string) {
client.rpush(key, string);
}
public void lpush(final byte[] key, final byte[] string) {
client.lpush(key, string);
}
public void llen(final byte[] key) {
client.llen(key);
}
public void lrange(final byte[] key, final int start, final int end) {
client.lrange(key, start, end);
}
public void ltrim(final byte[] key, final int start, final int end) {
client.ltrim(key, start, end);
}
public void lindex(final byte[] key, final int index) {
client.lindex(key, index);
}
public void lset(final byte[] key, final int index, final byte[] value) {
client.lset(key, index, value);
}
public void lrem(final byte[] key, final int count, final byte[] value) {
client.lrem(key, count, value);
}
public void lpop(final byte[] key) {
client.lpop(key);
}
public void rpop(final byte[] key) {
client.rpop(key);
}
public void rpoplpush(final byte[] srckey, final byte[] dstkey) {
client.rpoplpush(srckey, dstkey);
}
public void sadd(final byte[] key, final byte[] member) {
client.sadd(key, member);
}
public void smembers(final byte[] key) {
client.smembers(key);
}
public void srem(final byte[] key, final byte[] member) {
client.srem(key, member);
}
public void spop(final byte[] key) {
client.spop(key);
}
public void smove(final byte[] srckey, final byte[] dstkey,
final byte[] member) {
client.smove(srckey, dstkey, member);
}
public void scard(final byte[] key) {
client.scard(key);
}
public void sismember(final byte[] key, final byte[] member) {
client.sismember(key, member);
}
public void sinter(final byte[]... keys) {
client.sinter(keys);
}
public void sinterstore(final byte[] dstkey, final byte[]... keys) {
client.sinterstore(dstkey, keys);
}
public void sunion(final byte[]... keys) {
client.sunion(keys);
}
public void sunionstore(final byte[] dstkey, final byte[]... keys) {
client.sunionstore(dstkey, keys);
}
public void sdiff(final byte[]... keys) {
client.sdiff(keys);
}
public void sdiffstore(final byte[] dstkey, final byte[]... keys) {
client.sdiffstore(dstkey, keys);
}
public void srandmember(final byte[] key) {
client.srandmember(key);
}
public void zadd(final byte[] key, final double score, final byte[] member) {
client.zadd(key, score, member);
}
public void zrange(final byte[] key, final int start, final int end) {
client.zrange(key, start, end);
}
public void zrem(final byte[] key, final byte[] member) {
client.zrem(key, member);
}
public void zincrby(final byte[] key, final double score,
final byte[] member) {
client.zincrby(key, score, member);
}
public void zrank(final byte[] key, final byte[] member) {
client.zrank(key, member);
}
public void zrevrank(final byte[] key, final byte[] member) {
client.zrevrank(key, member);
}
public void zrevrange(final byte[] key, final int start, final int end) {
client.zrevrange(key, start, end);
}
public void zrangeWithScores(final byte[] key, final int start,
final int end) {
client.zrangeWithScores(key, start, end);
}
public void zrevrangeWithScores(final byte[] key, final int start,
final int end) {
client.zrevrangeWithScores(key, start, end);
}
public void zcard(final byte[] key) {
client.zcard(key);
}
public void zscore(final byte[] key, final byte[] member) {
client.zscore(key, member);
}
public List<Object> exec() {
client.exec();
client.getAll(1); // Discard all but the last reply
return client.getObjectMultiBulkReply();
List<Object> unformatted = client.getObjectMultiBulkReply();
if (unformatted == null) {
return null;
}
List<Object> formatted = new ArrayList<Object>();
for (Object o : unformatted) {
formatted.add(generateResponse(o).get());
}
return formatted;
}
public String discard() {
client.discard();
client.getAll(1); // Discard all but the last reply
inTransaction = false;
clean();
return client.getStatusCodeReply();
}
public void sort(final byte[] key) {
client.sort(key);
public Response<Long> append(byte[] key, byte[] value) {
client.append(key, value);
return getResponse(BuilderFactory.LONG);
}
public void sort(final byte[] key, final SortingParams sortingParameters) {
client.sort(key, sortingParameters);
public Response<List<String>> blpop(byte[]... args) {
client.blpop(args);
return getResponse(BuilderFactory.STRING_LIST);
}
public void sort(final byte[] key, final SortingParams sortingParameters,
final byte[] dstkey) {
client.sort(key, sortingParameters, dstkey);
public Response<List<String>> brpop(byte[]... args) {
client.brpop(args);
return getResponse(BuilderFactory.STRING_LIST);
}
public void sort(final byte[] key, final byte[] dstkey) {
client.sort(key, dstkey);
public Response<Long> decr(byte[] key) {
client.decr(key);
return getResponse(BuilderFactory.LONG);
}
public void setbit(byte[] key, long offset, byte[] value) {
client.setbit(key, offset, value);
public Response<Long> decrBy(byte[] key, long integer) {
client.decrBy(key, integer);
return getResponse(BuilderFactory.LONG);
}
public void getbit(byte[] key, long offset) {
client.getbit(key, offset);
public Response<Long> del(byte[]... keys) {
client.del(keys);
return getResponse(BuilderFactory.LONG);
}
public void linsert(final byte[] key, final LIST_POSITION where,
final byte[] pivot, final byte[] value) {
public Response<String> echo(byte[] string) {
client.echo(string);
return getResponse(BuilderFactory.STRING);
}
public Response<Boolean> exists(byte[] key) {
client.exists(key);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<Long> expire(byte[] key, int seconds) {
client.expire(key, seconds);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> expireAt(byte[] key, long unixTime) {
client.expireAt(key, unixTime);
return getResponse(BuilderFactory.LONG);
}
public Response<String> get(byte[] key) {
client.get(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> getSet(byte[] key, byte[] value) {
client.getSet(key, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> hdel(byte[] key, byte[] field) {
client.hdel(key, field);
return getResponse(BuilderFactory.LONG);
}
public Response<Boolean> hexists(byte[] key, byte[] field) {
client.hexists(key, field);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<String> hget(byte[] key, byte[] field) {
client.hget(key, field);
return getResponse(BuilderFactory.STRING);
}
public Response<Map<String, String>> hgetAll(byte[] key) {
client.hgetAll(key);
return getResponse(BuilderFactory.STRING_MAP);
}
public Response<Long> hincrBy(byte[] key, byte[] field, long value) {
client.hincrBy(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> hkeys(byte[] key) {
client.hkeys(key);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> hlen(byte[] key) {
client.hlen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> hmget(byte[] key, byte[]... fields) {
client.hmget(key, fields);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<String> hmset(byte[] key, Map<byte[], byte[]> hash) {
client.hmset(key, hash);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> hset(byte[] key, byte[] field, byte[] value) {
client.hset(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> hsetnx(byte[] key, byte[] field, byte[] value) {
client.hsetnx(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> hvals(byte[] key) {
client.hvals(key);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> incr(byte[] key) {
client.incr(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> incrBy(byte[] key, long integer) {
client.incrBy(key, integer);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> keys(byte[] pattern) {
client.keys(pattern);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<String> lindex(byte[] key, int index) {
client.lindex(key, index);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> linsert(byte[] key, LIST_POSITION where,
byte[] pivot, byte[] value) {
client.linsert(key, where, pivot, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> llen(byte[] key) {
client.llen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> lpop(byte[] key) {
client.lpop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> lpush(byte[] key, byte[] string) {
client.lpush(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> lpushx(byte[] key, byte[] bytes) {
client.lpushx(key, bytes);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> lrange(byte[] key, long start, int end) {
client.lrange(key, start, end);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> lrem(byte[] key, long count, byte[] value) {
client.lrem(key, count, value);
return getResponse(BuilderFactory.LONG);
}
public Response<String> lset(byte[] key, long index, byte[] value) {
client.lset(key, index, value);
return getResponse(BuilderFactory.STRING);
}
public Response<String> ltrim(byte[] key, long start, long end) {
client.ltrim(key, start, end);
return getResponse(BuilderFactory.STRING);
}
public Response<List<String>> mget(byte[]... keys) {
client.mget(keys);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> move(byte[] key, int dbIndex) {
client.move(key, dbIndex);
return getResponse(BuilderFactory.LONG);
}
public Response<String> mset(byte[]... keysvalues) {
client.mset(keysvalues);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> msetnx(byte[]... keysvalues) {
client.msetnx(keysvalues);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> persist(byte[] key) {
client.persist(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> rename(byte[] oldkey, byte[] newkey) {
client.rename(oldkey, newkey);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> renamenx(byte[] oldkey, byte[] newkey) {
client.renamenx(oldkey, newkey);
return getResponse(BuilderFactory.LONG);
}
public Response<String> rpop(byte[] key) {
client.rpop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> rpoplpush(byte[] srckey, byte[] dstkey) {
client.rpoplpush(srckey, dstkey);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> rpush(byte[] key, byte[] string) {
client.rpush(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> rpushx(byte[] key, byte[] string) {
client.rpushx(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> sadd(byte[] key, byte[] member) {
client.sadd(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> scard(byte[] key) {
client.scard(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> sdiff(byte[]... keys) {
client.sdiff(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sdiffstore(byte[] dstkey, byte[]... keys) {
client.sdiffstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<String> set(byte[] key, byte[] value) {
client.set(key, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Boolean> setbit(String key, long offset, boolean value) {
client.setbit(key, offset, value);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<String> setex(byte[] key, int seconds, byte[] value) {
client.setex(key, seconds, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> setnx(byte[] key, byte[] value) {
client.setnx(key, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> sinter(byte[]... keys) {
client.sinter(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sinterstore(byte[] dstkey, byte[]... keys) {
client.sinterstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<Boolean> sismember(byte[] key, byte[] member) {
client.sismember(key, member);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<Set<String>> smembers(byte[] key) {
client.smembers(key);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> smove(byte[] srckey, byte[] dstkey, byte[] member) {
client.smove(srckey, dstkey, member);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> sort(byte[] key) {
client.sort(key);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(byte[] key,
SortingParams sortingParameters) {
client.sort(key, sortingParameters);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(byte[] key,
SortingParams sortingParameters, byte[] dstkey) {
client.sort(key, sortingParameters, dstkey);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(byte[] key, byte[] dstkey) {
client.sort(key, dstkey);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<String> spop(byte[] key) {
client.spop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> srandmember(byte[] key) {
client.srandmember(key);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> srem(byte[] key, byte[] member) {
client.srem(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> strlen(byte[] key) {
client.strlen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> substr(byte[] key, int start, int end) {
client.substr(key, start, end);
return getResponse(BuilderFactory.STRING);
}
public Response<Set<String>> sunion(byte[]... keys) {
client.sunion(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sunionstore(byte[] dstkey, byte[]... keys) {
client.sunionstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> ttl(byte[] key) {
client.ttl(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> type(byte[] key) {
client.type(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> watch(byte[]... keys) {
client.watch(keys);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> zadd(byte[] key, double score, byte[] member) {
client.zadd(key, score, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zcard(byte[] key) {
client.zcard(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zcount(byte[] key, double min, double max) {
client.zcount(key, min, max);
return getResponse(BuilderFactory.LONG);
}
public Response<Double> zincrby(byte[] key, double score, byte[] member) {
client.zincrby(key, score, member);
return getResponse(BuilderFactory.DOUBLE);
}
public Response<Long> zinterstore(byte[] dstkey, byte[]... sets) {
client.zinterstore(dstkey, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zinterstore(byte[] dstkey, ZParams params,
byte[]... sets) {
client.zinterstore(dstkey, params, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> zrange(byte[] key, int start, int end) {
client.zrange(key, start, end);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> zrangeByScore(byte[] key, double min,
double max) {
client.zrangeByScore(key, min, max);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> zrangeByScore(byte[] key, byte[] min,
byte[] max) {
client.zrangeByScore(key, min, max);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> zrangeByScore(byte[] key, double min,
double max, int offset, int count) {
client.zrangeByScore(key, min, max, offset, count);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<Tuple>> zrangeByScoreWithScores(byte[] key, double min,
double max) {
client.zrangeByScoreWithScores(key, min, max);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Set<Tuple>> zrangeByScoreWithScores(byte[] key, double min,
double max, int offset, int count) {
client.zrangeByScoreWithScores(key, min, max, offset, count);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Set<Tuple>> zrangeWithScores(byte[] key, int start, int end) {
client.zrangeWithScores(key, start, end);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Long> zrank(byte[] key, byte[] member) {
client.zrank(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zrem(byte[] key, byte[] member) {
client.zrem(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zremrangeByRank(byte[] key, int start, int end) {
client.zremrangeByRank(key, start, end);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zremrangeByScore(byte[] key, double start, double end) {
client.zremrangeByScore(key, start, end);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> zrevrange(byte[] key, int start, int end) {
client.zrevrange(key, start, end);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<Tuple>> zrevrangeWithScores(byte[] key, int start,
int end) {
client.zrevrangeWithScores(key, start, end);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Long> zrevrank(byte[] key, byte[] member) {
client.zrevrank(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Double> zscore(byte[] key, byte[] member) {
client.zscore(key, member);
return getResponse(BuilderFactory.DOUBLE);
}
public Response<Long> zunionstore(byte[] dstkey, byte[]... sets) {
client.zunionstore(dstkey, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zunionstore(byte[] dstkey, ZParams params,
byte[]... sets) {
client.zunionstore(dstkey, params, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<String> brpoplpush(byte[] source, byte[] destination,
int timeout) {
client.brpoplpush(source, destination, timeout);
return getResponse(BuilderFactory.STRING);
}
}

View File

@@ -0,0 +1,5 @@
package redis.clients.jedis;
public abstract class Builder<T> {
public abstract T build(Object data);
}

View File

@@ -0,0 +1,163 @@
package redis.clients.jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.util.SafeEncoder;
public class BuilderFactory {
public static final Builder<Double> DOUBLE = new Builder<Double>() {
public Double build(Object data) {
return Double.valueOf(STRING.build(data));
}
public String toString() {
return "double";
}
};
public static final Builder<Boolean> BOOLEAN = new Builder<Boolean>() {
public Boolean build(Object data) {
return ((Long) data) == 1;
}
public String toString() {
return "boolean";
}
};
public static final Builder<Long> LONG = new Builder<Long>() {
public Long build(Object data) {
return (Long) data;
}
public String toString() {
return "long";
}
};
public static final Builder<String> STRING = new Builder<String>() {
public String build(Object data) {
return SafeEncoder.encode((byte[]) data);
}
public String toString() {
return "string";
}
};
public static final Builder<List<String>> STRING_LIST = new Builder<List<String>>() {
@SuppressWarnings("unchecked")
public List<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final ArrayList<String> result = new ArrayList<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
public String toString() {
return "List<String>";
}
};
public static final Builder<Map<String, String>> STRING_MAP = new Builder<Map<String, String>>() {
@SuppressWarnings("unchecked")
public Map<String, String> build(Object data) {
final List<byte[]> flatHash = (List<byte[]>) data;
final Map<String, String> hash = new HashMap<String, String>();
final Iterator<byte[]> iterator = flatHash.iterator();
while (iterator.hasNext()) {
hash.put(SafeEncoder.encode(iterator.next()), SafeEncoder
.encode(iterator.next()));
}
return hash;
}
public String toString() {
return "Map<String, String>";
}
};
public static final Builder<Set<String>> STRING_SET = new Builder<Set<String>>() {
@SuppressWarnings("unchecked")
public Set<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final Set<String> result = new HashSet<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
public String toString() {
return "Set<String>";
}
};
public static final Builder<Set<String>> STRING_ZSET = new Builder<Set<String>>() {
@SuppressWarnings("unchecked")
public Set<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final Set<String> result = new LinkedHashSet<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
public String toString() {
return "ZSet<String>";
}
};
public static final Builder<Set<Tuple>> TUPLE_ZSET = new Builder<Set<Tuple>>() {
@SuppressWarnings("unchecked")
public Set<Tuple> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final Set<Tuple> result = new LinkedHashSet<Tuple>(l.size());
Iterator<byte[]> iterator = l.iterator();
while (iterator.hasNext()) {
result.add(new Tuple(SafeEncoder.encode(iterator.next()),
Double.valueOf(SafeEncoder.encode(iterator.next()))));
}
return result;
}
public String toString() {
return "ZSet<Tuple>";
}
};
}

View File

@@ -1,12 +1,12 @@
package redis.clients.jedis;
import static redis.clients.jedis.Protocol.toByteArray;
import redis.clients.util.SafeEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import redis.clients.util.SafeEncoder;
import static redis.clients.jedis.Protocol.toByteArray;
public class Client extends BinaryClient implements Commands {
public Client(final String host) {
@@ -201,23 +201,23 @@ public class Client extends BinaryClient implements Commands {
llen(SafeEncoder.encode(key));
}
public void lrange(final String key, final int start, final int end) {
public void lrange(final String key, final long start, final long end) {
lrange(SafeEncoder.encode(key), start, end);
}
public void ltrim(final String key, final int start, final int end) {
public void ltrim(final String key, final long start, final long end) {
ltrim(SafeEncoder.encode(key), start, end);
}
public void lindex(final String key, final int index) {
public void lindex(final String key, final long index) {
lindex(SafeEncoder.encode(key), index);
}
public void lset(final String key, final int index, final String value) {
public void lset(final String key, final long index, final String value) {
lset(SafeEncoder.encode(key), index, SafeEncoder.encode(value));
}
public void lrem(final String key, int count, final String value) {
public void lrem(final String key, long count, final String value) {
lrem(SafeEncoder.encode(key), count, SafeEncoder.encode(value));
}
@@ -435,6 +435,33 @@ public class Client extends BinaryClient implements Commands {
count);
}
public void zrevrangeByScore(final String key, final double max,
final double min) {
zrevrangeByScore(SafeEncoder.encode(key), max, min);
}
public void zrevrangeByScore(final String key, final String max,
final String min) {
zrevrangeByScore(SafeEncoder.encode(key), SafeEncoder.encode(max),
SafeEncoder.encode(min));
}
public void zrevrangeByScore(final String key, final double max,
final double min, final int offset, int count) {
zrevrangeByScore(SafeEncoder.encode(key), max, min, offset, count);
}
public void zrevrangeByScoreWithScores(final String key, final double max,
final double min) {
zrevrangeByScoreWithScores(SafeEncoder.encode(key), max, min);
}
public void zrevrangeByScoreWithScores(final String key, final double max,
final double min, final int offset, final int count) {
zrevrangeByScoreWithScores(SafeEncoder.encode(key), max, min, offset,
count);
}
public void zremrangeByRank(final String key, final int start, final int end) {
zremrangeByRank(SafeEncoder.encode(key), start, end);
}
@@ -510,7 +537,7 @@ 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 ? 0 : 1));
setbit(SafeEncoder.encode(key), offset, toByteArray(value ? 1 : 0));
}
public void getbit(String key, long offset) {
@@ -560,4 +587,4 @@ public class Client extends BinaryClient implements Commands {
}
subscribe(cs);
}
}
}

View File

@@ -1,9 +1,9 @@
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);
@@ -92,15 +92,15 @@ public interface Commands {
public void llen(final String key);
public void lrange(final String key, final int start, final int end);
public void lrange(final String key, final long start, final long end);
public void ltrim(final String key, final int start, final int end);
public void ltrim(final String key, final long start, final long end);
public void lindex(final String key, final int index);
public void lindex(final String key, final long index);
public void lset(final String key, final int index, final String value);
public void lset(final String key, final long index, final String value);
public void lrem(final String key, int count, final String value);
public void lrem(final String key, final long count, final String value);
public void lpop(final String key);
@@ -197,6 +197,21 @@ public interface Commands {
public void zrangeByScoreWithScores(final String key, final double min,
final double max, final int offset, final int count);
public void zrevrangeByScore(final String key, final double max,
final double min);
public void zrevrangeByScore(final String key, final String max,
final String min);
public void zrevrangeByScore(final String key, final double max,
final double min, final int offset, int count);
public void zrevrangeByScoreWithScores(final String key, final double max,
final double min);
public void zrevrangeByScoreWithScores(final String key, final double max,
final double min, final int offset, final int count);
public void zremrangeByRank(final String key, final int start, final int end);
public void zremrangeByScore(final String key, final double start,
@@ -238,10 +253,10 @@ public interface Commands {
public void configGet(final String pattern);
public void configResetStat();
public void multi();
public void exec();
public void discard();
}

View File

@@ -193,19 +193,7 @@ public class Connection {
}
public List<String> getMultiBulkReply() {
final List<byte[]> bresult = getBinaryMultiBulkReply();
if (null == bresult) {
return null;
}
final ArrayList<String> result = new ArrayList<String>(bresult.size());
for (final byte[] barray : bresult) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
return BuilderFactory.STRING_LIST.build(getBinaryMultiBulkReply());
}
@SuppressWarnings("unchecked")

View File

@@ -1,7 +1,6 @@
package redis.clients.jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -10,7 +9,6 @@ import java.util.Map;
import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.exceptions.JedisDataException;
public class Jedis extends BinaryJedis implements JedisCommands {
public Jedis(final String host) {
@@ -30,7 +28,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
}
public String ping() {
runChecks();
checkIsInMulti();
client.ping();
return client.getStatusCodeReply();
}
@@ -46,7 +44,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply
*/
public String set(final String key, String value) {
runChecks();
checkIsInMulti();
client.set(key, value);
return client.getStatusCodeReply();
}
@@ -62,7 +60,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String get(final String key) {
runChecks();
checkIsInMulti();
client.sendCommand(Protocol.Command.GET, key);
return client.getBulkReply();
}
@@ -71,9 +69,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* Ask the server to silently close the connection.
*/
public void quit() {
runChecks();
public String quit() {
checkIsInMulti();
client.quit();
return client.getStatusCodeReply();
}
/**
@@ -84,10 +83,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* Time complexity: O(1)
*
* @param key
* @return Integer reply, "0" if the key exists, otherwise "1"
* @return Boolean reply, true if the key exists, otherwise false
*/
public Boolean exists(final String key) {
runChecks();
checkIsInMulti();
client.exists(key);
return client.getIntegerReply() == 1;
}
@@ -103,7 +102,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* more keys were removed 0 if none of the specified key existed
*/
public Long del(final String... keys) {
runChecks();
checkIsInMulti();
client.del(keys);
return client.getIntegerReply();
}
@@ -123,7 +122,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* contains a Hash value
*/
public String type(final String key) {
runChecks();
checkIsInMulti();
client.type(key);
return client.getStatusCodeReply();
}
@@ -136,7 +135,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public String flushDB() {
runChecks();
checkIsInMulti();
client.flushDB();
return client.getStatusCodeReply();
}
@@ -173,11 +172,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply
*/
public Set<String> keys(final String pattern) {
runChecks();
checkIsInMulti();
client.keys(pattern);
final HashSet<String> keySet = new HashSet<String>(client
.getMultiBulkReply());
return keySet;
return BuilderFactory.STRING_SET
.build(client.getBinaryMultiBulkReply());
}
/**
@@ -189,7 +187,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* empty string is the database is empty
*/
public String randomKey() {
runChecks();
checkIsInMulti();
client.randomKey();
return client.getBulkReply();
}
@@ -206,7 +204,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code repy
*/
public String rename(final String oldkey, final String newkey) {
runChecks();
checkIsInMulti();
client.rename(oldkey, newkey);
return client.getStatusCodeReply();
}
@@ -223,7 +221,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* target key already exist
*/
public Long renamenx(final String oldkey, final String newkey) {
runChecks();
checkIsInMulti();
client.renamenx(oldkey, newkey);
return client.getIntegerReply();
}
@@ -235,7 +233,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long dbSize() {
runChecks();
checkIsInMulti();
client.dbSize();
return client.getIntegerReply();
}
@@ -269,7 +267,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* exist.
*/
public Long expire(final String key, final int seconds) {
runChecks();
checkIsInMulti();
client.expire(key, seconds);
return client.getIntegerReply();
}
@@ -305,7 +303,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* exist.
*/
public Long expireAt(final String key, final long unixTime) {
runChecks();
checkIsInMulti();
client.expireAt(key, unixTime);
return client.getIntegerReply();
}
@@ -322,7 +320,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* have an associated expire, -1 is returned.
*/
public Long ttl(final String key) {
runChecks();
checkIsInMulti();
client.ttl(key);
return client.getIntegerReply();
}
@@ -336,7 +334,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public String select(final int index) {
runChecks();
checkIsInMulti();
client.select(index);
return client.getStatusCodeReply();
}
@@ -355,7 +353,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* found in the current DB.
*/
public Long move(final String key, final int dbIndex) {
runChecks();
checkIsInMulti();
client.move(key, dbIndex);
return client.getIntegerReply();
}
@@ -368,7 +366,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public String flushAll() {
runChecks();
checkIsInMulti();
client.flushAll();
return client.getStatusCodeReply();
}
@@ -385,7 +383,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String getSet(final String key, final String value) {
runChecks();
checkIsInMulti();
client.getSet(key, value);
return client.getBulkReply();
}
@@ -401,7 +399,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply
*/
public List<String> mget(final String... keys) {
runChecks();
checkIsInMulti();
client.mget(keys);
return client.getMultiBulkReply();
}
@@ -419,7 +417,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* was not set
*/
public Long setnx(final String key, final String value) {
runChecks();
checkIsInMulti();
client.setnx(key, value);
return client.getIntegerReply();
}
@@ -437,7 +435,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply
*/
public String setex(final String key, final int seconds, final String value) {
runChecks();
checkIsInMulti();
client.setex(key, seconds, value);
return client.getStatusCodeReply();
}
@@ -463,7 +461,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply Basically +OK as MSET can't fail
*/
public String mset(final String... keysvalues) {
runChecks();
checkIsInMulti();
client.mset(keysvalues);
return client.getStatusCodeReply();
}
@@ -490,7 +488,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* no key was set (at least one key already existed)
*/
public Long msetnx(final String... keysvalues) {
runChecks();
checkIsInMulti();
client.msetnx(keysvalues);
return client.getIntegerReply();
}
@@ -518,7 +516,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* after the increment.
*/
public Long decrBy(final String key, final long integer) {
runChecks();
checkIsInMulti();
client.decrBy(key, integer);
return client.getIntegerReply();
}
@@ -546,7 +544,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* after the increment.
*/
public Long decr(final String key) {
runChecks();
checkIsInMulti();
client.decr(key);
return client.getIntegerReply();
}
@@ -574,7 +572,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* after the increment.
*/
public Long incrBy(final String key, final long integer) {
runChecks();
checkIsInMulti();
client.incrBy(key, integer);
return client.getIntegerReply();
}
@@ -602,7 +600,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* after the increment.
*/
public Long incr(final String key) {
runChecks();
checkIsInMulti();
client.incr(key);
return client.getIntegerReply();
}
@@ -624,7 +622,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* the append operation.
*/
public Long append(final String key, final String value) {
runChecks();
checkIsInMulti();
client.append(key, value);
return client.getIntegerReply();
}
@@ -648,7 +646,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String substr(final String key, final int start, final int end) {
runChecks();
checkIsInMulti();
client.substr(key, start, end);
return client.getBulkReply();
}
@@ -669,7 +667,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* 1 is returned.
*/
public Long hset(final String key, final String field, final String value) {
runChecks();
checkIsInMulti();
client.hset(key, field, value);
return client.getIntegerReply();
}
@@ -688,7 +686,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String hget(final String key, final String field) {
runChecks();
checkIsInMulti();
client.hget(key, field);
return client.getBulkReply();
}
@@ -705,7 +703,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* field is created 1 is returned.
*/
public Long hsetnx(final String key, final String field, final String value) {
runChecks();
checkIsInMulti();
client.hsetnx(key, field, value);
return client.getIntegerReply();
}
@@ -720,10 +718,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*
* @param key
* @param hash
* @return Always OK because HMSET can't fail
* @return Return OK or Exception if hash is empty
*/
public String hmset(final String key, final Map<String, String> hash) {
runChecks();
checkIsInMulti();
client.hmset(key, hash);
return client.getStatusCodeReply();
}
@@ -742,7 +740,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* with the specified fields, in the same order of the request.
*/
public List<String> hmget(final String key, final String... fields) {
runChecks();
checkIsInMulti();
client.hmget(key, fields);
return client.getMultiBulkReply();
}
@@ -766,7 +764,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* operation.
*/
public Long hincrBy(final String key, final String field, final long value) {
runChecks();
checkIsInMulti();
client.hincrBy(key, field, value);
return client.getIntegerReply();
}
@@ -782,7 +780,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* Return 0 if the key is not found or the field is not present.
*/
public Boolean hexists(final String key, final String field) {
runChecks();
checkIsInMulti();
client.hexists(key, field);
return client.getIntegerReply() == 1;
}
@@ -798,7 +796,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* returned, otherwise 0 is returned and no operation is performed.
*/
public Long hdel(final String key, final String field) {
runChecks();
checkIsInMulti();
client.hdel(key, field);
return client.getIntegerReply();
}
@@ -814,7 +812,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* an empty hash.
*/
public Long hlen(final String key) {
runChecks();
checkIsInMulti();
client.hlen(key);
return client.getIntegerReply();
}
@@ -828,10 +826,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return All the fields names contained into a hash.
*/
public Set<String> hkeys(final String key) {
runChecks();
checkIsInMulti();
client.hkeys(key);
final List<String> lresult = client.getMultiBulkReply();
return new HashSet<String>(lresult);
return BuilderFactory.STRING_SET
.build(client.getBinaryMultiBulkReply());
}
/**
@@ -843,7 +841,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return All the fields values contained into a hash.
*/
public List<String> hvals(final String key) {
runChecks();
checkIsInMulti();
client.hvals(key);
final List<String> lresult = client.getMultiBulkReply();
return lresult;
@@ -858,16 +856,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return All the fields and values contained into a hash.
*/
public Map<String, String> hgetAll(final String key) {
runChecks();
checkIsInMulti();
client.hgetAll(key);
final List<String> flatHash = client.getMultiBulkReply();
final Map<String, String> hash = new HashMap<String, String>();
final Iterator<String> iterator = flatHash.iterator();
while (iterator.hasNext()) {
hash.put(iterator.next(), iterator.next());
}
return hash;
return BuilderFactory.STRING_MAP
.build(client.getBinaryMultiBulkReply());
}
/**
@@ -886,7 +878,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* list after the push operation.
*/
public Long rpush(final String key, final String string) {
runChecks();
checkIsInMulti();
client.rpush(key, string);
return client.getIntegerReply();
}
@@ -907,7 +899,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* list after the push operation.
*/
public Long lpush(final String key, final String string) {
runChecks();
checkIsInMulti();
client.lpush(key, string);
return client.getIntegerReply();
}
@@ -923,7 +915,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return The length of the list.
*/
public Long llen(final String key) {
runChecks();
checkIsInMulti();
client.llen(key);
return client.getIntegerReply();
}
@@ -966,8 +958,8 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply, specifically a list of elements in the
* specified range.
*/
public List<String> lrange(final String key, final int start, final int end) {
runChecks();
public List<String> lrange(final String key, final long start, final long end) {
checkIsInMulti();
client.lrange(key, start, end);
return client.getMultiBulkReply();
}
@@ -1006,8 +998,8 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @param end
* @return Status code reply
*/
public String ltrim(final String key, final int start, final int end) {
runChecks();
public String ltrim(final String key, final long start, final long end) {
checkIsInMulti();
client.ltrim(key, start, end);
return client.getStatusCodeReply();
}
@@ -1030,8 +1022,8 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @param index
* @return Bulk reply, specifically the requested element
*/
public String lindex(final String key, final int index) {
runChecks();
public String lindex(final String key, final long index) {
checkIsInMulti();
client.lindex(key, index);
return client.getBulkReply();
}
@@ -1057,8 +1049,8 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @param value
* @return Status code reply
*/
public String lset(final String key, final int index, final String value) {
runChecks();
public String lset(final String key, final long index, final String value) {
checkIsInMulti();
client.lset(key, index, value);
return client.getStatusCodeReply();
}
@@ -1082,8 +1074,8 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Integer Reply, specifically: The number of removed elements if
* the operation succeeded
*/
public Long lrem(final String key, final int count, final String value) {
runChecks();
public Long lrem(final String key, final long count, final String value) {
checkIsInMulti();
client.lrem(key, count, value);
return client.getIntegerReply();
}
@@ -1102,7 +1094,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String lpop(final String key) {
runChecks();
checkIsInMulti();
client.lpop(key);
return client.getBulkReply();
}
@@ -1121,7 +1113,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String rpop(final String key) {
runChecks();
checkIsInMulti();
client.rpop(key);
return client.getBulkReply();
}
@@ -1145,7 +1137,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String rpoplpush(final String srckey, final String dstkey) {
runChecks();
checkIsInMulti();
client.rpoplpush(srckey, dstkey);
return client.getBulkReply();
}
@@ -1164,7 +1156,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* the element was already a member of the set
*/
public Long sadd(final String key, final String member) {
runChecks();
checkIsInMulti();
client.sadd(key, member);
return client.getIntegerReply();
}
@@ -1179,7 +1171,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply
*/
public Set<String> smembers(final String key) {
runChecks();
checkIsInMulti();
client.smembers(key);
final List<String> members = client.getMultiBulkReply();
return new HashSet<String>(members);
@@ -1198,7 +1190,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* if the new element was not a member of the set
*/
public Long srem(final String key, final String member) {
runChecks();
checkIsInMulti();
client.srem(key, member);
return client.getIntegerReply();
}
@@ -1216,7 +1208,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String spop(final String key) {
runChecks();
checkIsInMulti();
client.spop(key);
return client.getBulkReply();
}
@@ -1246,7 +1238,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long smove(final String srckey, final String dstkey,
final String member) {
runChecks();
checkIsInMulti();
client.smove(srckey, dstkey, member);
return client.getIntegerReply();
}
@@ -1260,7 +1252,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* of the set as an integer.
*/
public Long scard(final String key) {
runChecks();
checkIsInMulti();
client.scard(key);
return client.getIntegerReply();
}
@@ -1278,7 +1270,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* does not exist
*/
public Boolean sismember(final String key, final String member) {
runChecks();
checkIsInMulti();
client.sismember(key, member);
return client.getIntegerReply() == 1;
}
@@ -1303,7 +1295,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply, specifically the list of common elements.
*/
public Set<String> sinter(final String... keys) {
runChecks();
checkIsInMulti();
client.sinter(keys);
final List<String> members = client.getMultiBulkReply();
return new HashSet<String>(members);
@@ -1321,7 +1313,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply
*/
public Long sinterstore(final String dstkey, final String... keys) {
runChecks();
checkIsInMulti();
client.sinterstore(dstkey, keys);
return client.getIntegerReply();
}
@@ -1343,7 +1335,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Multi bulk reply, specifically the list of common elements.
*/
public Set<String> sunion(final String... keys) {
runChecks();
checkIsInMulti();
client.sunion(keys);
final List<String> members = client.getMultiBulkReply();
return new HashSet<String>(members);
@@ -1362,7 +1354,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply
*/
public Long sunionstore(final String dstkey, final String... keys) {
runChecks();
checkIsInMulti();
client.sunionstore(dstkey, keys);
return client.getIntegerReply();
}
@@ -1391,10 +1383,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* the first set provided and all the successive sets.
*/
public Set<String> sdiff(final String... keys) {
runChecks();
checkIsInMulti();
client.sdiff(keys);
final List<String> members = client.getMultiBulkReply();
return new HashSet<String>(members);
return BuilderFactory.STRING_SET
.build(client.getBinaryMultiBulkReply());
}
/**
@@ -1406,7 +1398,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Status code reply
*/
public Long sdiffstore(final String dstkey, final String... keys) {
runChecks();
checkIsInMulti();
client.sdiffstore(dstkey, keys);
return client.getIntegerReply();
}
@@ -1424,7 +1416,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return Bulk reply
*/
public String srandmember(final String key) {
runChecks();
checkIsInMulti();
client.srandmember(key);
return client.getBulkReply();
}
@@ -1451,13 +1443,13 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* was updated
*/
public Long zadd(final String key, final double score, final String member) {
runChecks();
checkIsInMulti();
client.zadd(key, score, member);
return client.getIntegerReply();
}
public Set<String> zrange(final String key, final int start, final int end) {
runChecks();
checkIsInMulti();
client.zrange(key, start, end);
final List<String> members = client.getMultiBulkReply();
return new LinkedHashSet<String>(members);
@@ -1479,7 +1471,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* if the new element was not a member of the set
*/
public Long zrem(final String key, final String member) {
runChecks();
checkIsInMulti();
client.zrem(key, member);
return client.getIntegerReply();
}
@@ -1510,7 +1502,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Double zincrby(final String key, final double score,
final String member) {
runChecks();
checkIsInMulti();
client.zincrby(key, score, member);
String newscore = client.getBulkReply();
return Double.valueOf(newscore);
@@ -1537,7 +1529,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* reply if there is no such element.
*/
public Long zrank(final String key, final String member) {
runChecks();
checkIsInMulti();
client.zrank(key, member);
return client.getIntegerReply();
}
@@ -1563,14 +1555,14 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* reply if there is no such element.
*/
public Long zrevrank(final String key, final String member) {
runChecks();
checkIsInMulti();
client.zrevrank(key, member);
return client.getIntegerReply();
}
public Set<String> zrevrange(final String key, final int start,
final int end) {
runChecks();
checkIsInMulti();
client.zrevrange(key, start, end);
final List<String> members = client.getMultiBulkReply();
return new LinkedHashSet<String>(members);
@@ -1578,7 +1570,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
public Set<Tuple> zrangeWithScores(final String key, final int start,
final int end) {
runChecks();
checkIsInMulti();
client.zrangeWithScores(key, start, end);
Set<Tuple> set = getTupledSet();
return set;
@@ -1586,7 +1578,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
public Set<Tuple> zrevrangeWithScores(final String key, final int start,
final int end) {
runChecks();
checkIsInMulti();
client.zrevrangeWithScores(key, start, end);
Set<Tuple> set = getTupledSet();
return set;
@@ -1602,7 +1594,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return the cardinality (number of elements) of the set as an integer.
*/
public Long zcard(final String key) {
runChecks();
checkIsInMulti();
client.zcard(key);
return client.getIntegerReply();
}
@@ -1619,33 +1611,12 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return the score
*/
public Double zscore(final String key, final String member) {
runChecks();
checkIsInMulti();
client.zscore(key, member);
final String score = client.getBulkReply();
return (score != null ? new Double(score) : null);
}
private void runChecks() {
if (client.isInMulti()) {
throw new JedisDataException(
"Cannot use Jedis when in Multi. Please use JedisTransaction instead.");
}
this.connect();
}
public void connect() {
if (!client.isConnected()) {
client.connect();
if (this.password != null) {
this.auth(this.password);
}
}
}
public void disconnect() {
client.disconnect();
}
public String watch(final String... keys) {
client.watch(keys);
return client.getStatusCodeReply();
@@ -1669,7 +1640,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* smallest to the biggest number.
*/
public List<String> sort(final String key) {
runChecks();
checkIsInMulti();
client.sort(key);
return client.getMultiBulkReply();
}
@@ -1752,7 +1723,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public List<String> sort(final String key,
final SortingParams sortingParameters) {
runChecks();
checkIsInMulti();
client.sort(key, sortingParameters);
return client.getMultiBulkReply();
}
@@ -1830,7 +1801,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* programming language used.
*/
public List<String> blpop(final int timeout, final String... keys) {
runChecks();
checkIsInMulti();
List<String> args = new ArrayList<String>();
for (String arg : keys) {
args.add(arg);
@@ -1859,7 +1830,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long sort(final String key, final SortingParams sortingParameters,
final String dstkey) {
runChecks();
checkIsInMulti();
client.sort(key, sortingParameters, dstkey);
return client.getIntegerReply();
}
@@ -1881,7 +1852,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* @return The number of elements of the list at dstkey.
*/
public Long sort(final String key, final String dstkey) {
runChecks();
checkIsInMulti();
client.sort(key, dstkey);
return client.getIntegerReply();
}
@@ -1959,7 +1930,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* programming language used.
*/
public List<String> brpop(final int timeout, final String... keys) {
runChecks();
checkIsInMulti();
List<String> args = new ArrayList<String>();
for (String arg : keys) {
args.add(arg);
@@ -1991,33 +1962,35 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public String auth(final String password) {
runChecks();
checkIsInMulti();
client.auth(password);
return client.getStatusCodeReply();
}
public void subscribe(JedisPubSub jedisPubSub, String... channels) {
runChecks();
checkIsInMulti();
connect();
client.setTimeoutInfinite();
jedisPubSub.proceed(client, channels);
client.rollbackTimeout();
}
public Long publish(String channel, String message) {
runChecks();
checkIsInMulti();
client.publish(channel, message);
return client.getIntegerReply();
}
public void psubscribe(JedisPubSub jedisPubSub, String... patterns) {
runChecks();
checkIsInMulti();
connect();
client.setTimeoutInfinite();
jedisPubSub.proceedWithPatterns(client, patterns);
client.rollbackTimeout();
}
public Long zcount(final String key, final double min, final double max) {
runChecks();
checkIsInMulti();
client.zcount(key, min, max);
return client.getIntegerReply();
}
@@ -2081,14 +2054,14 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Set<String> zrangeByScore(final String key, final double min,
final double max) {
runChecks();
checkIsInMulti();
client.zrangeByScore(key, min, max);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
public Set<String> zrangeByScore(final String key, final String min,
final String max) {
runChecks();
checkIsInMulti();
client.zrangeByScore(key, min, max);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
@@ -2151,7 +2124,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Set<String> zrangeByScore(final String key, final double min,
final double max, final int offset, final int count) {
runChecks();
checkIsInMulti();
client.zrangeByScore(key, min, max, offset, count);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
@@ -2214,7 +2187,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Set<Tuple> zrangeByScoreWithScores(final String key,
final double min, final double max) {
runChecks();
checkIsInMulti();
client.zrangeByScoreWithScores(key, min, max);
Set<Tuple> set = getTupledSet();
return set;
@@ -2279,14 +2252,14 @@ public class Jedis extends BinaryJedis implements JedisCommands {
public Set<Tuple> zrangeByScoreWithScores(final String key,
final double min, final double max, final int offset,
final int count) {
runChecks();
checkIsInMulti();
client.zrangeByScoreWithScores(key, min, max, offset, count);
Set<Tuple> set = getTupledSet();
return set;
}
private Set<Tuple> getTupledSet() {
runChecks();
checkIsInMulti();
List<String> membersWithScores = client.getMultiBulkReply();
Set<Tuple> set = new LinkedHashSet<Tuple>();
Iterator<String> iterator = membersWithScores.iterator();
@@ -2298,6 +2271,44 @@ public class Jedis extends BinaryJedis implements JedisCommands {
return set;
}
public Set<String> zrevrangeByScore(final String key, final double max,
final double min) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
public Set<String> zrevrangeByScore(final String key, final String max,
final String min) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
public Set<String> zrevrangeByScore(final String key, final double max,
final double min, final int offset, final int count) {
checkIsInMulti();
client.zrevrangeByScore(key, max, min, offset, count);
return new LinkedHashSet<String>(client.getMultiBulkReply());
}
public Set<Tuple> zrevrangeByScoreWithScores(final String key,
final double max, final double min) {
checkIsInMulti();
client.zrevrangeByScoreWithScores(key, max, min);
Set<Tuple> set = getTupledSet();
return set;
}
public Set<Tuple> zrevrangeByScoreWithScores(final String key,
final double max, final double min, final int offset,
final int count) {
checkIsInMulti();
client.zrevrangeByScoreWithScores(key, max, min, offset, count);
Set<Tuple> set = getTupledSet();
return set;
}
/**
* Remove all elements in the sorted set at key with rank between start and
* end. Start and end are 0-based with rank 0 being the element with the
@@ -2312,7 +2323,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*
*/
public Long zremrangeByRank(final String key, final int start, final int end) {
runChecks();
checkIsInMulti();
client.zremrangeByRank(key, start, end);
return client.getIntegerReply();
}
@@ -2333,7 +2344,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long zremrangeByScore(final String key, final double start,
final double end) {
runChecks();
checkIsInMulti();
client.zremrangeByScore(key, start, end);
return client.getIntegerReply();
}
@@ -2377,7 +2388,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* set at dstkey
*/
public Long zunionstore(final String dstkey, final String... sets) {
runChecks();
checkIsInMulti();
client.zunionstore(dstkey, sets);
return client.getIntegerReply();
}
@@ -2423,7 +2434,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long zunionstore(final String dstkey, final ZParams params,
final String... sets) {
runChecks();
checkIsInMulti();
client.zunionstore(dstkey, params, sets);
return client.getIntegerReply();
}
@@ -2467,7 +2478,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
* set at dstkey
*/
public Long zinterstore(final String dstkey, final String... sets) {
runChecks();
checkIsInMulti();
client.zinterstore(dstkey, sets);
return client.getIntegerReply();
}
@@ -2513,7 +2524,7 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public Long zinterstore(final String dstkey, final ZParams params,
final String... sets) {
runChecks();
checkIsInMulti();
client.zinterstore(dstkey, params, sets);
return client.getIntegerReply();
}
@@ -2570,7 +2581,10 @@ public class Jedis extends BinaryJedis implements JedisCommands {
*/
public String brpoplpush(String source, String destination, int timeout) {
client.brpoplpush(source, destination, timeout);
return client.getBulkReply();
client.setTimeoutInfinite();
String reply = client.getBulkReply();
client.rollbackTimeout();
return reply;
}
/**
@@ -2607,4 +2621,4 @@ public class Jedis extends BinaryJedis implements JedisCommands {
client.getrange(key, startOffset, endOffset);
return client.getBulkReply();
}
}
}

View File

@@ -79,15 +79,15 @@ public interface JedisCommands {
Long llen(String key);
List<String> lrange(String key, int start, int end);
List<String> lrange(String key, long start, long end);
String ltrim(String key, int start, int end);
String ltrim(String key, long start, long end);
String lindex(String key, int index);
String lindex(String key, long index);
String lset(String key, int index, String value);
String lset(String key, long index, String value);
Long lrem(String key, int count, String value);
Long lrem(String key, long count, String value);
String lpop(String key);
@@ -137,14 +137,24 @@ public interface JedisCommands {
Set<String> zrangeByScore(String key, double min, double max);
Set<String> zrevrangeByScore(String key, double max, double min);
Set<String> zrangeByScore(String key, double min, double max, int offset,
int count);
Set<String> zrevrangeByScore(String key, double max, double min,
int offset, int count);
Set<Tuple> zrangeByScoreWithScores(String key, double min, double max);
Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min);
Set<Tuple> zrangeByScoreWithScores(String key, double min, double max,
int offset, int count);
Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min,
int offset, int count);
Long zremrangeByRank(String key, int start, int end);
Long zremrangeByScore(String key, double start, double end);

View File

@@ -5,6 +5,7 @@ public abstract class JedisMonitor {
public void proceed(Client client) {
this.client = client;
this.client.setTimeoutInfinite();
do {
String command = client.getBulkReply();
onCommand(command);

View File

@@ -10,6 +10,7 @@ import static redis.clients.jedis.Protocol.Keyword.UNSUBSCRIBE;
import java.util.Arrays;
import java.util.List;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisException;
import redis.clients.util.SafeEncoder;
@@ -31,6 +32,10 @@ public abstract class JedisPubSub {
public abstract void onPSubscribe(String pattern, int subscribedChannels);
public void unsubscribe() {
if (client == null) {
throw new JedisConnectionException(
"JedisPubSub was not subscribed to a Jedis instance.");
}
client.unsubscribe();
client.flush();
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,466 +1,6 @@
package redis.clients.jedis;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import java.util.Map;
public abstract class PipelineBlock implements Commands {
private Client client;
public void setClient(Client client) {
this.client = client;
}
public void append(String key, String value) {
client.append(key, value);
}
public void blpop(String[] args) {
client.blpop(args);
}
public void brpop(String[] args) {
client.brpop(args);
}
public void decr(String key) {
client.decr(key);
}
public void decrBy(String key, long integer) {
client.decrBy(key, integer);
}
public void del(String... keys) {
client.del(keys);
}
public void echo(String string) {
client.echo(string);
}
public void exists(String key) {
client.exists(key);
}
public void expire(String key, int seconds) {
client.expire(key, seconds);
}
public void expireAt(String key, long unixTime) {
client.expireAt(key, unixTime);
}
public void get(String key) {
client.get(key);
}
public void getbit(String key, long offset) {
client.getbit(key, offset);
}
public void getrange(String key, long startOffset, long endOffset) {
client.getrange(key, startOffset, endOffset);
}
public void getSet(String key, String value) {
client.getSet(key, value);
}
public void hdel(String key, String field) {
client.hdel(key, field);
}
public void hexists(String key, String field) {
client.hexists(key, field);
}
public void hget(String key, String field) {
client.hget(key, field);
}
public void hgetAll(String key) {
client.hgetAll(key);
}
public void hincrBy(String key, String field, long value) {
client.hincrBy(key, field, value);
}
public void hkeys(String key) {
client.hkeys(key);
}
public void hlen(String key) {
client.hlen(key);
}
public void hmget(String key, String... fields) {
client.hmget(key, fields);
}
public void hmset(String key, Map<String, String> hash) {
client.hmset(key, hash);
}
public void hset(String key, String field, String value) {
client.hset(key, field, value);
}
public void hsetnx(String key, String field, String value) {
client.hsetnx(key, field, value);
}
public void hvals(String key) {
client.hvals(key);
}
public void incr(String key) {
client.incr(key);
}
public void incrBy(String key, long integer) {
client.incrBy(key, integer);
}
public void keys(String pattern) {
client.keys(pattern);
}
public void lindex(String key, int index) {
client.lindex(key, index);
}
public void linsert(String key, LIST_POSITION where, String pivot,
String value) {
client.linsert(key, where, pivot, value);
}
public void llen(String key) {
client.llen(key);
}
public void lpop(String key) {
client.lpop(key);
}
public void lpush(String key, String string) {
client.lpush(key, string);
}
public void lpushx(String key, String string) {
client.lpushx(key, string);
}
public void lrange(String key, int start, int end) {
client.lrange(key, start, end);
}
public void lrem(String key, int count, String value) {
client.lrem(key, count, value);
}
public void lset(String key, int index, String value) {
client.lset(key, index, value);
}
public void ltrim(String key, int start, int end) {
client.ltrim(key, start, end);
}
public void mget(String... keys) {
client.mget(keys);
}
public void move(String key, int dbIndex) {
client.move(key, dbIndex);
}
public void mset(String... keysvalues) {
client.mset(keysvalues);
}
public void msetnx(String... keysvalues) {
client.msetnx(keysvalues);
}
public void persist(String key) {
client.persist(key);
}
public void rename(String oldkey, String newkey) {
client.rename(oldkey, newkey);
}
public void renamenx(String oldkey, String newkey) {
client.renamenx(oldkey, newkey);
}
public void rpop(String key) {
client.rpop(key);
}
public void rpoplpush(String srckey, String dstkey) {
client.rpoplpush(srckey, dstkey);
}
public void rpush(String key, String string) {
client.rpush(key, string);
}
public void rpushx(String key, String string) {
client.rpushx(key, string);
}
public void sadd(String key, String member) {
client.sadd(key, member);
}
public void scard(String key) {
client.scard(key);
}
public void sdiff(String... keys) {
client.sdiff(keys);
}
public void sdiffstore(String dstkey, String... keys) {
client.sdiffstore(dstkey, keys);
}
public void set(String key, String value) {
client.set(key, value);
}
public void setbit(String key, long offset, boolean value) {
client.setbit(key, offset, value);
}
public void setex(String key, int seconds, String value) {
client.setex(key, seconds, value);
}
public void setnx(String key, String value) {
client.setnx(key, value);
}
public void setrange(String key, long offset, String value) {
client.setrange(key, offset, value);
}
public void sinter(String... keys) {
client.sinter(keys);
}
public void sinterstore(String dstkey, String... keys) {
client.sinterstore(dstkey, keys);
}
public void sismember(String key, String member) {
client.sismember(key, member);
}
public void smembers(String key) {
client.smembers(key);
}
public void smove(String srckey, String dstkey, String member) {
client.smove(srckey, dstkey, member);
}
public void sort(String key) {
client.sort(key);
}
public void sort(String key, SortingParams sortingParameters) {
client.sort(key, sortingParameters);
}
public void sort(String key, SortingParams sortingParameters, String dstkey) {
client.sort(key, sortingParameters, dstkey);
}
public void sort(String key, String dstkey) {
client.sort(key, dstkey);
}
public void spop(String key) {
client.spop(key);
}
public void srandmember(String key) {
client.srandmember(key);
}
public void srem(String key, String member) {
client.srem(key, member);
}
public void strlen(String key) {
client.strlen(key);
}
public void substr(String key, int start, int end) {
client.substr(key, start, end);
}
public void sunion(String... keys) {
client.sunion(keys);
}
public void sunionstore(String dstkey, String... keys) {
client.sunionstore(dstkey, keys);
}
public void ttl(String key) {
client.ttl(key);
}
public void type(String key) {
client.type(key);
}
public void watch(String... keys) {
client.watch(keys);
}
public void zadd(String key, double score, String member) {
client.zadd(key, score, member);
}
public void zcard(String key) {
client.zcard(key);
}
public void zcount(String key, double min, double max) {
client.zcount(key, min, max);
}
public void zincrby(String key, double score, String member) {
client.zincrby(key, score, member);
}
public void zinterstore(String dstkey, String... sets) {
client.zinterstore(dstkey, sets);
}
public void zinterstore(String dstkey, ZParams params, String... sets) {
client.zinterstore(dstkey, params, sets);
}
public void zrange(String key, int start, int end) {
client.zrange(key, start, end);
}
public void zrangeByScore(String key, double min, double max) {
client.zrangeByScore(key, min, max);
}
public void zrangeByScore(String key, String min, String max) {
client.zrangeByScore(key, min, max);
}
public void zrangeByScore(String key, double min, double max, int offset,
int count) {
client.zrangeByScore(key, min, max, offset, count);
}
public void zrangeByScoreWithScores(String key, double min, double max) {
client.zrangeByScoreWithScores(key, min, max);
}
public void zrangeByScoreWithScores(String key, double min, double max,
int offset, int count) {
client.zrangeByScoreWithScores(key, min, max, offset, count);
}
public void zrangeWithScores(String key, int start, int end) {
client.zrangeWithScores(key, start, end);
}
public void zrank(String key, String member) {
client.zrank(key, member);
}
public void zrem(String key, String member) {
client.zrem(key, member);
}
public void zremrangeByRank(String key, int start, int end) {
client.zremrangeByRank(key, start, end);
}
public void zremrangeByScore(String key, double start, double end) {
client.zremrangeByScore(key, start, end);
}
public void zrevrange(String key, int start, int end) {
client.zrevrange(key, start, end);
}
public void zrevrangeWithScores(String key, int start, int end) {
client.zrevrangeWithScores(key, start, end);
}
public void zrevrank(String key, String member) {
client.zrevrank(key, member);
}
public void zscore(String key, String member) {
client.zscore(key, member);
}
public void zunionstore(String dstkey, String... sets) {
client.zunionstore(dstkey, sets);
}
public void zunionstore(String dstkey, ZParams params, String... sets) {
client.zunionstore(dstkey, params, sets);
}
public void bgrewriteaof() {
client.bgrewriteaof();
}
public void bgsave() {
client.bgsave();
}
public void configGet(String pattern) {
client.configGet(pattern);
}
public void configSet(String parameter, String value) {
client.configSet(parameter, value);
}
public void brpoplpush(String source, String destination, int timeout) {
client.brpoplpush(source, destination, timeout);
}
public void configResetStat() {
client.configResetStat();
}
public void save() {
client.save();
}
public void lastsave() {
client.lastsave();
}
public void discard() {
client.discard();
}
public void exec() {
client.exec();
}
public void multi() {
client.multi();
}
public abstract class PipelineBlock extends Pipeline {
public abstract void execute();
}

View File

@@ -135,7 +135,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, 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;
public final byte[] raw;
@@ -153,4 +153,4 @@ public final class Protocol {
}
}
}
}

View File

@@ -0,0 +1,27 @@
package redis.clients.jedis;
import java.util.LinkedList;
import java.util.Queue;
public class Queable {
private Queue<Response<?>> pipelinedResponses = new LinkedList<Response<?>>();
protected void clean() {
pipelinedResponses.clear();
}
protected Response<?> generateResponse(Object data) {
Response<?> response = pipelinedResponses.poll();
if (response != null) {
response.set(data);
}
return response;
}
protected <T> Response<T> getResponse(Builder<T> builder) {
Response<T> lr = new Response<T>(builder);
pipelinedResponses.add(lr);
return lr;
}
}

View File

@@ -0,0 +1,31 @@
package redis.clients.jedis;
import redis.clients.jedis.exceptions.JedisDataException;
public class Response<T> {
protected T response = null;
private boolean built = false;
private Builder<T> builder;
public Response(Builder<T> b) {
this.builder = b;
}
public void set(Object data) {
response = builder.build(data);
built = true;
}
public T get() {
if (!built) {
throw new JedisDataException(
"Please close pipeline or multi block before calling this method.");
}
return response;
}
public String toString() {
return "Response " + builder.toString();
}
}

View File

@@ -169,6 +169,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
return j.hexists(key, field);
}
public Long del(String key) {
Jedis j = getShard(key);
return j.del(key);
}
public Long hdel(String key, String field) {
Jedis j = getShard(key);
return j.hdel(key, field);
@@ -209,27 +214,27 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
return j.llen(key);
}
public List<String> lrange(String key, int start, int end) {
public List<String> lrange(String key, long start, long end) {
Jedis j = getShard(key);
return j.lrange(key, start, end);
}
public String ltrim(String key, int start, int end) {
public String ltrim(String key, long start, long end) {
Jedis j = getShard(key);
return j.ltrim(key, start, end);
}
public String lindex(String key, int index) {
public String lindex(String key, long index) {
Jedis j = getShard(key);
return j.lindex(key, index);
}
public String lset(String key, int index, String value) {
public String lset(String key, long index, String value) {
Jedis j = getShard(key);
return j.lset(key, index, value);
}
public Long lrem(String key, int count, String value) {
public Long lrem(String key, long count, String value) {
Jedis j = getShard(key);
return j.lrem(key, count, value);
}
@@ -354,23 +359,46 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
return j.zrangeByScore(key, min, max);
}
public Set<String> zrevrangeByScore(String key, double max, double min) {
Jedis j = getShard(key);
return j.zrevrangeByScore(key, max, min);
}
public Set<String> zrangeByScore(String key, double min, double max,
int offset, int count) {
Jedis j = getShard(key);
return j.zrangeByScore(key, min, max, offset, count);
}
public Set<String> zrevrangeByScore(String key, double max, double min,
int offset, int count) {
Jedis j = getShard(key);
return j.zrevrangeByScore(key, max, min, offset, count);
}
public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max) {
Jedis j = getShard(key);
return j.zrangeByScoreWithScores(key, min, max);
}
public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,
double min) {
Jedis j = getShard(key);
return j.zrevrangeByScoreWithScores(key, max, min);
}
public Set<Tuple> zrangeByScoreWithScores(String key, double min,
double max, int offset, int count) {
Jedis j = getShard(key);
return j.zrangeByScoreWithScores(key, min, max, offset, count);
}
public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,
double min, int offset, int count) {
Jedis j = getShard(key);
return j.zrevrangeByScoreWithScores(key, max, min, offset, count);
}
public Long zremrangeByRank(String key, int start, int end) {
Jedis j = getShard(key);
return j.zremrangeByRank(key, start, end);
@@ -386,4 +414,4 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
Jedis j = getShard(key);
return j.linsert(key, where, pivot, value);
}
}
}

View File

@@ -1,11 +1,11 @@
package redis.clients.jedis;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
public abstract class ShardedJedisPipeline {
private BinaryShardedJedis jedis;
private List<FutureResult> results = new ArrayList<FutureResult>();
@@ -425,6 +425,30 @@ public abstract class ShardedJedisPipeline {
results.add(new FutureResult(c));
}
protected void getbit(String key, long offset) {
Client c = jedis.getShard(key).getClient();
c.getbit(key, offset);
results.add(new FutureResult(c));
}
public void setbit(String key, long offset, boolean value) {
Client c = jedis.getShard(key).getClient();
c.setbit(key, offset, value);
results.add(new FutureResult(c));
}
public void setrange(String key, long offset, String value) {
Client c = jedis.getShard(key).getClient();
c.setrange(key, offset, value);
results.add(new FutureResult(c));
}
public void getrange(String key, long startOffset, long endOffset) {
Client c = jedis.getShard(key).getClient();
c.getrange(key, startOffset, endOffset);
results.add(new FutureResult(c));
}
public List<Object> getResults() {
List<Object> r = new ArrayList<Object>();
for (FutureResult fr : results) {

View File

@@ -12,7 +12,7 @@ import redis.clients.util.Pool;
public class ShardedJedisPool extends Pool<ShardedJedis> {
public ShardedJedisPool(final GenericObjectPool.Config poolConfig,
List<JedisShardInfo> shards) {
this(poolConfig, shards, Hashing.MD5);
this(poolConfig, shards, Hashing.MURMUR_HASH);
}
public ShardedJedisPool(final GenericObjectPool.Config poolConfig,
@@ -22,7 +22,7 @@ public class ShardedJedisPool extends Pool<ShardedJedis> {
public ShardedJedisPool(final GenericObjectPool.Config poolConfig,
List<JedisShardInfo> shards, Pattern keyTagPattern) {
this(poolConfig, shards, Hashing.MD5, keyTagPattern);
this(poolConfig, shards, Hashing.MURMUR_HASH, keyTagPattern);
}
public ShardedJedisPool(final GenericObjectPool.Config poolConfig,
@@ -47,40 +47,32 @@ public class ShardedJedisPool extends Pool<ShardedJedis> {
public Object makeObject() throws Exception {
ShardedJedis jedis = new ShardedJedis(shards, algo, keyTagPattern);
boolean done = false;
while (!done) {
try {
for (Jedis shard : jedis.getAllShards()) {
if (!shard.isConnected()) {
shard.connect();
}
}
done = true;
} catch (Exception e) {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
}
}
}
return jedis;
}
public void destroyObject(final Object obj) throws Exception {
if (obj != null) {
try {
((ShardedJedis) obj).disconnect();
} catch (Exception e) {
if ((obj != null) && (obj instanceof ShardedJedis)) {
ShardedJedis shardedJedis = (ShardedJedis) obj;
for (Jedis jedis : shardedJedis.getAllShards()) {
try {
try {
jedis.quit();
} catch (Exception e) {
}
jedis.disconnect();
} catch (Exception e) {
}
}
}
}
public boolean validateObject(final Object obj) {
try {
try {
ShardedJedis jedis = (ShardedJedis) obj;
for (Jedis shard : jedis.getAllShards()) {
if (!shard.isConnected() || !shard.ping().equals("PONG")) {
if (!shard.ping().equals("PONG")) {
return false;
}
}

View File

@@ -1,6 +1,8 @@
package redis.clients.jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
@@ -12,339 +14,567 @@ public class Transaction extends BinaryTransaction {
super(client);
}
public void set(final String key, final String value) {
client.set(key, value);
}
public void get(final String key) {
client.get(key);
}
public void exists(final String key) {
client.exists(key);
}
public void del(final String... keys) {
client.del(keys);
}
public void type(final String key) {
client.type(key);
}
public void keys(final String pattern) {
client.keys(pattern);
}
public void randomKey() {
client.randomKey();
}
public void rename(final String oldkey, final String newkey) {
client.rename(oldkey, newkey);
}
public void renamenx(final String oldkey, final String newkey) {
client.renamenx(oldkey, newkey);
}
public void expire(final String key, final int seconds) {
client.expire(key, seconds);
}
public void expireAt(final String key, final long unixTime) {
client.expireAt(key, unixTime);
}
public void ttl(final String key) {
client.ttl(key);
}
public void move(final String key, final int dbIndex) {
client.move(key, dbIndex);
}
public void getSet(final String key, final String value) {
client.getSet(key, value);
}
public void mget(final String... keys) {
client.mget(keys);
}
public void setnx(final String key, final String value) {
client.setnx(key, value);
}
public void setex(final String key, final int seconds, final String value) {
client.setex(key, seconds, value);
}
public void mset(final String... keysvalues) {
client.mset(keysvalues);
}
public void msetnx(final String... keysvalues) {
client.msetnx(keysvalues);
}
public void decrBy(final String key, final int integer) {
client.decrBy(key, integer);
}
public void decr(final String key) {
client.decr(key);
}
public void incrBy(final String key, final int integer) {
client.incrBy(key, integer);
}
public void incr(final String key) {
client.incr(key);
}
public void append(final String key, final String value) {
public Response<Long> append(String key, String value) {
client.append(key, value);
return getResponse(BuilderFactory.LONG);
}
public void substr(final String key, final int start, final int end) {
client.substr(key, start, end);
public Response<List<String>> blpop(String... args) {
client.blpop(args);
return getResponse(BuilderFactory.STRING_LIST);
}
public void hset(final String key, final String field, final String value) {
client.hset(key, field, value);
public Response<List<String>> brpop(String... args) {
client.brpop(args);
return getResponse(BuilderFactory.STRING_LIST);
}
public void hget(final String key, final String field) {
client.hget(key, field);
public Response<Long> decr(String key) {
client.decr(key);
return getResponse(BuilderFactory.LONG);
}
public void hsetnx(final String key, final String field, final String value) {
client.hsetnx(key, field, value);
public Response<Long> decrBy(String key, long integer) {
client.decrBy(key, integer);
return getResponse(BuilderFactory.LONG);
}
public void hmset(final String key, final Map<String, String> hash) {
client.hmset(key, hash);
public Response<Long> del(String... keys) {
client.del(keys);
return getResponse(BuilderFactory.LONG);
}
public void hmget(final String key, final String... fields) {
client.hmget(key, fields);
public Response<String> echo(String string) {
client.echo(string);
return getResponse(BuilderFactory.STRING);
}
public void hincrBy(final String key, final String field, final int value) {
client.hincrBy(key, field, value);
public Response<Boolean> exists(String key) {
client.exists(key);
return getResponse(BuilderFactory.BOOLEAN);
}
public void hexists(final String key, final String field) {
client.hexists(key, field);
public Response<Long> expire(String key, int seconds) {
client.expire(key, seconds);
return getResponse(BuilderFactory.LONG);
}
public void hdel(final String key, final String field) {
client.hdel(key, field);
public Response<Long> expireAt(String key, long unixTime) {
client.expireAt(key, unixTime);
return getResponse(BuilderFactory.LONG);
}
public void hlen(final String key) {
client.hlen(key);
public Response<String> get(String key) {
client.get(key);
return getResponse(BuilderFactory.STRING);
}
public void hkeys(final String key) {
client.hkeys(key);
}
public void hvals(final String key) {
client.hvals(key);
}
public void hgetAll(final String key) {
client.hgetAll(key);
}
public void rpush(final String key, final String string) {
client.rpush(key, string);
}
public void lpush(final String key, final String string) {
client.lpush(key, string);
}
public void llen(final String key) {
client.llen(key);
}
public void lrange(final String key, final int start, final int end) {
client.lrange(key, start, end);
}
public void ltrim(String key, final int start, final int end) {
client.ltrim(key, start, end);
}
public void lindex(final String key, final int index) {
client.lindex(key, index);
}
public void lset(final String key, final int index, final String value) {
client.lset(key, index, value);
}
public void lrem(final String key, final int count, final String value) {
client.lrem(key, count, value);
}
public void lpop(final String key) {
client.lpop(key);
}
public void rpop(final String key) {
client.rpop(key);
}
public void rpoplpush(final String srckey, final String dstkey) {
client.rpoplpush(srckey, dstkey);
}
public void sadd(final String key, final String member) {
client.sadd(key, member);
}
public void smembers(final String key) {
client.smembers(key);
}
public void srem(final String key, final String member) {
client.srem(key, member);
}
public void spop(final String key) {
client.spop(key);
}
public void smove(final String srckey, final String dstkey,
final String member) {
client.smove(srckey, dstkey, member);
}
public void scard(final String key) {
client.scard(key);
}
public void sismember(final String key, final String member) {
client.sismember(key, member);
}
public void sinter(final String... keys) {
client.sinter(keys);
}
public void sinterstore(final String dstkey, final String... keys) {
client.sinterstore(dstkey, keys);
}
public void sunion(final String... keys) {
client.sunion(keys);
}
public void sunionstore(final String dstkey, final String... keys) {
client.sunionstore(dstkey, keys);
}
public void sdiff(final String... keys) {
client.sdiff(keys);
}
public void sdiffstore(final String dstkey, final String... keys) {
client.sdiffstore(dstkey, keys);
}
public void srandmember(final String key) {
client.srandmember(key);
}
public void zadd(final String key, final double score, final String member) {
client.zadd(key, score, member);
}
public void zrange(final String key, final int start, final int end) {
client.zrange(key, start, end);
}
public void zrem(final String key, final String member) {
client.zrem(key, member);
}
public void zincrby(final String key, final double score,
final String member) {
client.zincrby(key, score, member);
}
public void zrank(final String key, final String member) {
client.zrank(key, member);
}
public void zrevrank(final String key, final String member) {
client.zrevrank(key, member);
}
public void zrevrange(final String key, final int start, final int end) {
client.zrevrange(key, start, end);
}
public void zrangeWithScores(final String key, final int start,
final int end) {
client.zrangeWithScores(key, start, end);
}
public void zrevrangeWithScores(final String key, final int start,
final int end) {
client.zrevrangeWithScores(key, start, end);
}
public void zcard(final String key) {
client.zcard(key);
}
public void zscore(final String key, final String member) {
client.zscore(key, member);
}
public void sort(final String key) {
client.sort(key);
}
public void sort(final String key, final SortingParams sortingParameters) {
client.sort(key, sortingParameters);
}
public void sort(final String key, final String dstkey) {
client.sort(key, dstkey);
}
public void sort(final String key, final SortingParams sortingParameters,
final String dstkey) {
client.sort(key, sortingParameters, dstkey);
}
public void setbit(String key, long offset, boolean value) {
client.setbit(key, offset, value);
}
public void getbit(String key, long offset) {
public Response<Boolean> getbit(String key, long offset) {
client.getbit(key, offset);
return getResponse(BuilderFactory.BOOLEAN);
}
public long setrange(String key, long offset, String value) {
client.setrange(key, offset, value);
return client.getIntegerReply();
}
public String getrange(String key, long startOffset, long endOffset) {
public Response<String> getrange(String key, long startOffset,
long endOffset) {
client.getrange(key, startOffset, endOffset);
return client.getBulkReply();
return getResponse(BuilderFactory.STRING);
}
public void linsert(final String key, final LIST_POSITION where,
final String pivot, final String value) {
client.linsert(key, where, pivot, value);
public Response<String> getSet(String key, String value) {
client.getSet(key, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> hdel(String key, String field) {
client.hdel(key, field);
return getResponse(BuilderFactory.LONG);
}
public Response<Boolean> hexists(String key, String field) {
client.hexists(key, field);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<String> hget(String key, String field) {
client.hget(key, field);
return getResponse(BuilderFactory.STRING);
}
public Response<Map<String, String>> hgetAll(String key) {
client.hgetAll(key);
return getResponse(BuilderFactory.STRING_MAP);
}
public Response<Long> hincrBy(String key, String field, long value) {
client.hincrBy(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> hkeys(String key) {
client.hkeys(key);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> hlen(String key) {
client.hlen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> hmget(String key, String... fields) {
client.hmget(key, fields);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<String> hmset(String key, Map<String, String> hash) {
client.hmset(key, hash);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> hset(String key, String field, String value) {
client.hset(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> hsetnx(String key, String field, String value) {
client.hsetnx(key, field, value);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> hvals(String key) {
client.hvals(key);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> incr(String key) {
client.incr(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> incrBy(String key, long integer) {
client.incrBy(key, integer);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> keys(String pattern) {
client.keys(pattern);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<String> lindex(String key, int index) {
client.lindex(key, index);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> linsert(String key, LIST_POSITION where,
String pivot, String value) {
client.linsert(key, where, pivot, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> llen(String key) {
client.llen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> lpop(String key) {
client.lpop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> lpush(String key, String string) {
client.lpush(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> lpushx(String key, String string) {
client.lpushx(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> lrange(String key, long start, long end) {
client.lrange(key, start, end);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> lrem(String key, long count, String value) {
client.lrem(key, count, value);
return getResponse(BuilderFactory.LONG);
}
public Response<String> lset(String key, long index, String value) {
client.lset(key, index, value);
return getResponse(BuilderFactory.STRING);
}
public Response<String> ltrim(String key, long start, long end) {
client.ltrim(key, start, end);
return getResponse(BuilderFactory.STRING);
}
public Response<List<String>> mget(String... keys) {
client.mget(keys);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<Long> move(String key, int dbIndex) {
client.move(key, dbIndex);
return getResponse(BuilderFactory.LONG);
}
public Response<String> mset(String... keysvalues) {
client.mset(keysvalues);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> msetnx(String... keysvalues) {
client.msetnx(keysvalues);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> persist(String key) {
client.persist(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> rename(String oldkey, String newkey) {
client.rename(oldkey, newkey);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> renamenx(String oldkey, String newkey) {
client.renamenx(oldkey, newkey);
return getResponse(BuilderFactory.LONG);
}
public Response<String> rpop(String key) {
client.rpop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> rpoplpush(String srckey, String dstkey) {
client.rpoplpush(srckey, dstkey);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> rpush(String key, String string) {
client.rpush(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> rpushx(String key, String string) {
client.rpushx(key, string);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> sadd(String key, String member) {
client.sadd(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> scard(String key) {
client.scard(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> sdiff(String... keys) {
client.sdiff(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sdiffstore(String dstkey, String... keys) {
client.sdiffstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<String> set(String key, String value) {
client.set(key, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Boolean> setbit(String key, long offset, boolean value) {
client.setbit(key, offset, value);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<String> setex(String key, int seconds, String value) {
client.setex(key, seconds, value);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> setnx(String key, String value) {
client.setnx(key, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> setrange(String key, long offset, String value) {
client.setrange(key, offset, value);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> sinter(String... keys) {
client.sinter(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sinterstore(String dstkey, String... keys) {
client.sinterstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<Boolean> sismember(String key, String member) {
client.sismember(key, member);
return getResponse(BuilderFactory.BOOLEAN);
}
public Response<Set<String>> smembers(String key) {
client.smembers(key);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> smove(String srckey, String dstkey, String member) {
client.smove(srckey, dstkey, member);
return getResponse(BuilderFactory.LONG);
}
public Response<List<String>> sort(String key) {
client.sort(key);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(String key,
SortingParams sortingParameters) {
client.sort(key, sortingParameters);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(String key,
SortingParams sortingParameters, String dstkey) {
client.sort(key, sortingParameters, dstkey);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<List<String>> sort(String key, String dstkey) {
client.sort(key, dstkey);
return getResponse(BuilderFactory.STRING_LIST);
}
public Response<String> spop(String key) {
client.spop(key);
return getResponse(BuilderFactory.STRING);
}
public Response<String> srandmember(String key) {
client.srandmember(key);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> srem(String key, String member) {
client.srem(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> strlen(String key) {
client.strlen(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> substr(String key, int start, int end) {
client.substr(key, start, end);
return getResponse(BuilderFactory.STRING);
}
public Response<Set<String>> sunion(String... keys) {
client.sunion(keys);
return getResponse(BuilderFactory.STRING_SET);
}
public Response<Long> sunionstore(String dstkey, String... keys) {
client.sunionstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> ttl(String key) {
client.ttl(key);
return getResponse(BuilderFactory.LONG);
}
public Response<String> type(String key) {
client.type(key);
return getResponse(BuilderFactory.STRING);
}
public Response<Long> zadd(String key, double score, String member) {
client.zadd(key, score, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zcard(String key) {
client.zcard(key);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zcount(String key, double min, double max) {
client.zcount(key, min, max);
return getResponse(BuilderFactory.LONG);
}
public Response<Double> zincrby(String key, double score, String member) {
client.zincrby(key, score, member);
return getResponse(BuilderFactory.DOUBLE);
}
public Response<Long> zinterstore(String dstkey, String... sets) {
client.zinterstore(dstkey, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zinterstore(String dstkey, ZParams params,
String... sets) {
client.zinterstore(dstkey, params, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> zrange(String key, int start, int end) {
client.zrange(key, start, end);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> zrangeByScore(String key, double min,
double max) {
client.zrangeByScore(key, min, max);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> zrangeByScore(String key, String min,
String max) {
client.zrangeByScore(key, min, max);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<String>> 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<Set<Tuple>> zrangeByScoreWithScores(String key, double min,
double max) {
client.zrangeByScoreWithScores(key, min, max);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Set<Tuple>> 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<Set<Tuple>> zrangeWithScores(String key, int start, int end) {
client.zrangeWithScores(key, start, end);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Long> zrank(String key, String member) {
client.zrank(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zrem(String key, String member) {
client.zrem(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zremrangeByRank(String key, int start, int end) {
client.zremrangeByRank(key, start, end);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zremrangeByScore(String key, double start, double end) {
client.zremrangeByScore(key, start, end);
return getResponse(BuilderFactory.LONG);
}
public Response<Set<String>> zrevrange(String key, int start, int end) {
client.zrevrange(key, start, end);
return getResponse(BuilderFactory.STRING_ZSET);
}
public Response<Set<Tuple>> zrevrangeWithScores(String key, int start,
int end) {
client.zrevrangeWithScores(key, start, end);
return getResponse(BuilderFactory.TUPLE_ZSET);
}
public Response<Long> zrevrank(String key, String member) {
client.zrevrank(key, member);
return getResponse(BuilderFactory.LONG);
}
public Response<Double> zscore(String key, String member) {
client.zscore(key, member);
return getResponse(BuilderFactory.DOUBLE);
}
public Response<Long> zunionstore(String dstkey, String... sets) {
client.zunionstore(dstkey, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> zunionstore(String dstkey, ZParams params,
String... sets) {
client.zunionstore(dstkey, params, sets);
return getResponse(BuilderFactory.LONG);
}
public Response<String> bgrewriteaof() {
client.bgrewriteaof();
return getResponse(BuilderFactory.STRING);
}
public Response<String> bgsave() {
client.bgsave();
return getResponse(BuilderFactory.STRING);
}
public Response<String> configGet(String pattern) {
client.configGet(pattern);
return getResponse(BuilderFactory.STRING);
}
public Response<String> configSet(String parameter, String value) {
client.configSet(parameter, value);
return getResponse(BuilderFactory.STRING);
}
public Response<String> brpoplpush(String source, String destination,
int timeout) {
client.brpoplpush(source, destination, timeout);
return getResponse(BuilderFactory.STRING);
}
public Response<String> configResetStat() {
client.configResetStat();
return getResponse(BuilderFactory.STRING);
}
public Response<String> save() {
client.save();
return getResponse(BuilderFactory.STRING);
}
public Response<Long> lastsave() {
client.lastsave();
return getResponse(BuilderFactory.LONG);
}
public Response<Long> publish(String channel, String message) {
client.publish(channel, message);
return getResponse(BuilderFactory.LONG);
}
public Response<Long> publish(byte[] channel, byte[] message) {
client.publish(channel, message);
return getResponse(BuilderFactory.LONG);
}
}

View File

@@ -4,11 +4,10 @@ import java.util.Arrays;
import redis.clients.util.SafeEncoder;
public class Tuple {
public class Tuple implements Comparable<Tuple> {
private byte[] element;
private Double score;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
@@ -24,7 +23,6 @@ public class Tuple {
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
@@ -38,12 +36,16 @@ public class Tuple {
return false;
} else if (!Arrays.equals(element, other.element))
return false;
if (Double.doubleToLongBits(score) != Double
.doubleToLongBits(other.score))
return false;
return true;
}
public int compareTo(Tuple other) {
if (Arrays.equals(this.element, other.element))
return 0;
else
return this.score < other.getScore() ? -1 : 1;
}
public Tuple(String element, Double score) {
super();
this.element = SafeEncoder.encode(element);
@@ -75,4 +77,4 @@ public class Tuple {
public String toString() {
return '[' + Arrays.toString(element) + ',' + score + ']';
}
}
}

View File

@@ -5,23 +5,22 @@ import java.security.NoSuchAlgorithmException;
public interface Hashing {
public static final Hashing MURMUR_HASH = new MurmurHash();
public ThreadLocal<MessageDigest> md5Holder = new ThreadLocal<MessageDigest>();
public static final Hashing MD5 = new Hashing() {
private MessageDigest md5 = null; // avoid recurring construction
public long hash(String key) {
return hash(SafeEncoder.encode(key));
}
public long hash(byte[] key) {
if (md5 == null) {
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException(
"++++ no md5 algorythm found");
try {
if (md5Holder.get() == null) {
md5Holder.set(MessageDigest.getInstance("MD5"));
}
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("++++ no md5 algorythm found");
}
MessageDigest md5 = md5Holder.get();
md5.reset();
md5.update(key);

View File

@@ -3,6 +3,7 @@ package redis.clients.util;
import java.io.UnsupportedEncodingException;
import redis.clients.jedis.Protocol;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.exceptions.JedisException;
/**
@@ -12,6 +13,10 @@ import redis.clients.jedis.exceptions.JedisException;
public class SafeEncoder {
public static byte[] encode(final String str) {
try {
if (str == null) {
throw new JedisDataException(
"value sent to redis cannot be null");
}
return str.getBytes(Protocol.CHARSET);
} catch (UnsupportedEncodingException e) {
throw new JedisException(e);

View File

@@ -2,7 +2,7 @@ package redis.clients.util;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
@@ -15,7 +15,7 @@ public class Sharded<R, S extends ShardInfo<R>> {
public static final int DEFAULT_WEIGHT = 1;
private TreeMap<Long, S> nodes;
private final Hashing algo;
private final Map<ShardInfo<R>, R> resources = new HashMap<ShardInfo<R>, R>();
private final Map<ShardInfo<R>, R> resources = new LinkedHashMap<ShardInfo<R>, R>();
/**
* The default pattern used for extracting a key tag. The pattern must have
@@ -56,7 +56,7 @@ public class Sharded<R, S extends ShardInfo<R>> {
for (int i = 0; i != shards.size(); ++i) {
final S shardInfo = shards.get(i);
for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {
nodes.put(this.algo.hash(shardInfo.toString() + n), shardInfo);
nodes.put(this.algo.hash("SHARD-" + i + "-NODE-" + n), shardInfo);
}
resources.put(shardInfo, shardInfo.createResource());
}
@@ -70,7 +70,7 @@ public class Sharded<R, S extends ShardInfo<R>> {
return resources.get(getShardInfo(key));
}
private S getShardInfo(byte[] key) {
public S getShardInfo(byte[] key) {
SortedMap<Long, S> tail = nodes.tailMap(algo.hash(key));
if (tail.size() == 0) {
return nodes.get(nodes.firstKey());
@@ -85,7 +85,7 @@ public class Sharded<R, S extends ShardInfo<R>> {
/**
* A key tag is a special pattern inside a key that, if preset, is the only
* part of the key hashed in order to select the server for this key.
*
*
* @see http://code.google.com/p/redis/wiki/FAQ#I
* 'm_using_some_form_of_key_hashing_for_partitioning,_but_wh
* @param key
@@ -107,4 +107,5 @@ public class Sharded<R, S extends ShardInfo<R>> {
public Collection<R> getAllShards() {
return Collections.unmodifiableCollection(resources.values());
}
}
}