Merge branch 'master' into pipeline-and-transaction-can-handle-responses-on-their-own-status
* it's broken with later features, resetState() * fixed resetState() to make it work with this PR Conflicts: src/main/java/redis/clients/jedis/BinaryJedis.java src/main/java/redis/clients/jedis/Connection.java src/main/java/redis/clients/jedis/Pipeline.java src/main/java/redis/clients/jedis/Transaction.java src/main/java/redis/clients/jedis/TransactionBlock.java
This commit is contained in:
@@ -1,18 +1,31 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
import static redis.clients.jedis.Protocol.toByteArray;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.net.URI;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
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.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;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.*;
|
||||
public class BinaryJedis implements BasicCommands, BinaryJedisCommands,
|
||||
MultiKeyBinaryCommands, AdvancedBinaryJedisCommands,
|
||||
BinaryScriptingCommands, Closeable {
|
||||
|
||||
import static redis.clients.jedis.Protocol.toByteArray;
|
||||
|
||||
public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, BinaryScriptingCommands {
|
||||
protected Client client = null;
|
||||
protected Transaction transaction = null;
|
||||
protected Pipeline pipeline = null;
|
||||
|
||||
public BinaryJedis(final String host) {
|
||||
URI uri = URI.create(host);
|
||||
@@ -75,18 +88,23 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
/**
|
||||
* Set the string value as value of the key. The string can't be longer than
|
||||
* 1073741824 bytes (1 GB).
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
* @param nxxx NX|XX, NX -- Only set the key if it does not already exist.
|
||||
* XX -- Only set the key if it already exist.
|
||||
* @param expx EX|PX, expire time units: EX = seconds; PX = milliseconds
|
||||
* @param time expire time in the units of {@param #expx}
|
||||
* @param nxxx
|
||||
* NX|XX, NX -- Only set the key if it does not already exist. XX
|
||||
* -- Only set the key if it already exist.
|
||||
* @param expx
|
||||
* EX|PX, expire time units: EX = seconds; PX = milliseconds
|
||||
* @param time
|
||||
* expire time in the units of {@param #expx}
|
||||
* @return Status code reply
|
||||
*/
|
||||
public String set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final long time) {
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx, expx, time);
|
||||
return client.getStatusCodeReply();
|
||||
public String set(final byte[] key, final byte[] value, final byte[] nxxx,
|
||||
final byte[] expx, final long time) {
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx, expx, time);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,9 +165,9 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
}
|
||||
|
||||
public Long del(final byte[] key) {
|
||||
checkIsInMulti();
|
||||
client.del(key);
|
||||
return client.getIntegerReply();
|
||||
checkIsInMulti();
|
||||
client.del(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -619,6 +637,37 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
/**
|
||||
* INCRBYFLOAT work just like {@link #incrBy(byte[]) INCRBY} but increments
|
||||
* by floats instead of integers.
|
||||
* <p>
|
||||
* INCRBYFLOAT commands are limited to double precision floating point
|
||||
* values.
|
||||
* <p>
|
||||
* Note: this is actually a string operation, that is, in Redis there are
|
||||
* not "double" types. Simply the string stored at the key is parsed as a
|
||||
* base double precision floating point value, incremented, and then
|
||||
* converted back as a string. There is no DECRYBYFLOAT but providing a
|
||||
* negative value will work as expected.
|
||||
* <p>
|
||||
* Time complexity: O(1)
|
||||
*
|
||||
* @see #incr(byte[])
|
||||
* @see #decr(byte[])
|
||||
* @see #decrBy(byte[], long)
|
||||
*
|
||||
* @param key
|
||||
* @param integer
|
||||
* @return Integer reply, this commands will reply with the new value of key
|
||||
* after the increment.
|
||||
*/
|
||||
public Double incrByFloat(final byte[] key, final double integer) {
|
||||
checkIsInMulti();
|
||||
client.incrByFloat(key, integer);
|
||||
String dval = client.getBulkReply();
|
||||
return (dval != null ? new Double(dval) : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the number stored at key by one. If the key does not exist or
|
||||
* contains a value of a wrong type, set the key to the value of "0" before
|
||||
@@ -811,6 +860,33 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the number stored at field in the hash at key by a double
|
||||
* precision floating point value. If key does not exist, a new key holding
|
||||
* a hash is created. If field does not exist or holds a string, the value
|
||||
* is set to 0 before applying the operation. Since the value argument is
|
||||
* signed you can use this command to perform both increments and
|
||||
* decrements.
|
||||
* <p>
|
||||
* The range of values supported by HINCRBYFLOAT is limited to double
|
||||
* precision floating point values.
|
||||
* <p>
|
||||
* <b>Time complexity:</b> O(1)
|
||||
*
|
||||
* @param key
|
||||
* @param field
|
||||
* @param value
|
||||
* @return Double precision floating point reply The new value at field
|
||||
* after the increment operation.
|
||||
*/
|
||||
public Double hincrByFloat(final byte[] key, final byte[] field,
|
||||
final double value) {
|
||||
checkIsInMulti();
|
||||
client.hincrByFloat(key, field, value);
|
||||
final String dval = client.getBulkReply();
|
||||
return (dval != null ? new Double(dval) : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for existence of a specified field in a hash.
|
||||
*
|
||||
@@ -1006,7 +1082,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
* @return Multi bulk reply, specifically a list of elements in the
|
||||
* specified range.
|
||||
*/
|
||||
public List<byte[]> lrange(final byte[] key, final long start, final long end) {
|
||||
public List<byte[]> lrange(final byte[] key, final long start,
|
||||
final long end) {
|
||||
checkIsInMulti();
|
||||
client.lrange(key, start, end);
|
||||
return client.getBinaryMultiBulkReply();
|
||||
@@ -1468,11 +1545,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
client.srandmember(key);
|
||||
return client.getBinaryBulkReply();
|
||||
}
|
||||
|
||||
|
||||
public List<byte[]> srandmember(final byte[] key, final int count) {
|
||||
checkIsInMulti();
|
||||
client.srandmember(key, count);
|
||||
return client.getBinaryMultiBulkReply();
|
||||
checkIsInMulti();
|
||||
client.srandmember(key, count);
|
||||
return client.getBinaryMultiBulkReply();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1502,7 +1579,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long zadd(final byte[] key, final Map<Double, byte[]> scoreMembers) {
|
||||
public Long zadd(final byte[] key, final Map<byte[], Double> scoreMembers) {
|
||||
checkIsInMulti();
|
||||
client.zaddBinary(key, scoreMembers);
|
||||
return client.getIntegerReply();
|
||||
@@ -1680,26 +1757,30 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
public Transaction multi() {
|
||||
client.multi();
|
||||
client.getOne(); // expected OK
|
||||
return new Transaction(client);
|
||||
transaction = new Transaction(client);
|
||||
return transaction;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
/**
|
||||
* This method is deprecated due to its error prone
|
||||
* and will be removed on next major release
|
||||
* You can use multi() instead
|
||||
* @see https://github.com/xetorthio/jedis/pull/498
|
||||
*/
|
||||
public List<Object> multi(final TransactionBlock jedisTransaction) {
|
||||
List<Object> results = null;
|
||||
jedisTransaction.setClient(client);
|
||||
try {
|
||||
client.multi();
|
||||
client.getOne(); // expected OK
|
||||
jedisTransaction.execute();
|
||||
results = jedisTransaction.exec();
|
||||
} catch (Exception ex) {
|
||||
jedisTransaction.discard();
|
||||
}
|
||||
client.multi();
|
||||
client.getOne(); // expected OK
|
||||
jedisTransaction.execute();
|
||||
results = jedisTransaction.exec();
|
||||
return results;
|
||||
}
|
||||
|
||||
protected void checkIsInMulti() {
|
||||
if (client.isInMulti()) {
|
||||
throw new JedisDataException(
|
||||
throw new JedisDataException(
|
||||
"Cannot use Jedis when in Multi. Please use JedisTransaction instead.");
|
||||
}
|
||||
}
|
||||
@@ -1712,6 +1793,27 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
client.disconnect();
|
||||
}
|
||||
|
||||
public void resetState() {
|
||||
if (client.isConnected()) {
|
||||
if (transaction != null) {
|
||||
transaction.clear();
|
||||
}
|
||||
|
||||
if (pipeline != null) {
|
||||
pipeline.clear();
|
||||
}
|
||||
|
||||
if (client.isInWatch()) {
|
||||
unwatch();
|
||||
}
|
||||
|
||||
client.resetState();
|
||||
}
|
||||
|
||||
transaction = null;
|
||||
pipeline = null;
|
||||
}
|
||||
|
||||
public String watch(final byte[]... keys) {
|
||||
client.watch(keys);
|
||||
return client.getStatusCodeReply();
|
||||
@@ -1722,6 +1824,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
client.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort a Set or a List.
|
||||
* <p>
|
||||
@@ -2046,43 +2153,43 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
}
|
||||
|
||||
public List<byte[]> blpop(byte[] arg) {
|
||||
checkIsInMulti();
|
||||
byte[][] args = new byte[1][];
|
||||
args[0] = arg;
|
||||
client.blpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
checkIsInMulti();
|
||||
byte[][] args = new byte[1][];
|
||||
args[0] = arg;
|
||||
client.blpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
}
|
||||
|
||||
public List<byte[]> brpop(byte[] arg) {
|
||||
checkIsInMulti();
|
||||
byte[][] args = new byte[1][];
|
||||
args[0] = arg;
|
||||
client.brpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
checkIsInMulti();
|
||||
byte[][] args = new byte[1][];
|
||||
args[0] = arg;
|
||||
client.brpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
}
|
||||
|
||||
public List<byte[]> blpop(byte[]... args) {
|
||||
checkIsInMulti();
|
||||
client.blpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
checkIsInMulti();
|
||||
client.blpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
}
|
||||
|
||||
public List<byte[]> brpop(byte[]... args) {
|
||||
checkIsInMulti();
|
||||
client.brpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
checkIsInMulti();
|
||||
client.brpop(args);
|
||||
client.setTimeoutInfinite();
|
||||
final List<byte[]> multiBulkReply = client.getBinaryMultiBulkReply();
|
||||
client.rollbackTimeout();
|
||||
return multiBulkReply;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2106,14 +2213,12 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
/**
|
||||
* Starts a pipeline, which is a very efficient way to send lots of command
|
||||
* and read all the responses when you finish sending them. Try to avoid
|
||||
* this version and use pipelined() when possible as it will give better
|
||||
* performance.
|
||||
*
|
||||
* @param jedisPipeline
|
||||
* @return The results of the command in the same order you've run them.
|
||||
* This method is deprecated due to its error prone with multi
|
||||
* and will be removed on next major release
|
||||
* You can use pipelined() instead
|
||||
* @see https://github.com/xetorthio/jedis/pull/498
|
||||
*/
|
||||
public List<Object> pipelined(final PipelineBlock jedisPipeline) {
|
||||
jedisPipeline.setClient(client);
|
||||
@@ -2122,21 +2227,21 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
}
|
||||
|
||||
public Pipeline pipelined() {
|
||||
Pipeline pipeline = new Pipeline();
|
||||
pipeline = new Pipeline();
|
||||
pipeline.setClient(client);
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
public Long zcount(final byte[] key, final double min, final double max) {
|
||||
return zcount(key, toByteArray(min), toByteArray(max));
|
||||
return zcount(key, toByteArray(min), toByteArray(max));
|
||||
}
|
||||
|
||||
|
||||
public Long zcount(final byte[] key, final byte[] min, final byte[] max) {
|
||||
checkIsInMulti();
|
||||
client.zcount(key, min, max);
|
||||
return client.getIntegerReply();
|
||||
checkIsInMulti();
|
||||
client.zcount(key, min, max);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the all the elements in the sorted set at key with a score between
|
||||
* min and max (including elements with score equal to min or max).
|
||||
@@ -2196,7 +2301,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
public Set<byte[]> zrangeByScore(final byte[] key, final double min,
|
||||
final double max) {
|
||||
return zrangeByScore(key, toByteArray(min), toByteArray(max));
|
||||
}
|
||||
}
|
||||
|
||||
public Set<byte[]> zrangeByScore(final byte[] key, final byte[] min,
|
||||
final byte[] max) {
|
||||
@@ -2263,15 +2368,16 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
*/
|
||||
public Set<byte[]> zrangeByScore(final byte[] key, final double min,
|
||||
final double max, final int offset, final int count) {
|
||||
return zrangeByScore(key, toByteArray(min),toByteArray(max),offset, count);
|
||||
return zrangeByScore(key, toByteArray(min), toByteArray(max), offset,
|
||||
count);
|
||||
}
|
||||
|
||||
|
||||
public Set<byte[]> zrangeByScore(final byte[] key, final byte[] min,
|
||||
final byte[] max, final int offset, final int count) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScore(key, min, max, offset, count);
|
||||
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
|
||||
}
|
||||
final byte[] max, final int offset, final int count) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScore(key, min, max, offset, count);
|
||||
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the all the elements in the sorted set at key with a score between
|
||||
@@ -2333,14 +2439,14 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
final double min, final double max) {
|
||||
return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max));
|
||||
}
|
||||
|
||||
|
||||
public Set<Tuple> zrangeByScoreWithScores(final byte[] key,
|
||||
final byte[] min, final byte[] max) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScoreWithScores(key, min, max);
|
||||
Set<Tuple> set = getBinaryTupledSet();
|
||||
return set;
|
||||
}
|
||||
final byte[] min, final byte[] max) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScoreWithScores(key, min, max);
|
||||
Set<Tuple> set = getBinaryTupledSet();
|
||||
return set;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the all the elements in the sorted set at key with a score between
|
||||
@@ -2401,17 +2507,18 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
public Set<Tuple> zrangeByScoreWithScores(final byte[] key,
|
||||
final double min, final double max, final int offset,
|
||||
final int count) {
|
||||
return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max), offset, count);
|
||||
return zrangeByScoreWithScores(key, toByteArray(min), toByteArray(max),
|
||||
offset, count);
|
||||
}
|
||||
|
||||
|
||||
public Set<Tuple> zrangeByScoreWithScores(final byte[] key,
|
||||
final byte[] min, final byte[] max, final int offset,
|
||||
final int count) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScoreWithScores(key, min, max, offset, count);
|
||||
Set<Tuple> set = getBinaryTupledSet();
|
||||
return set;
|
||||
}
|
||||
final byte[] min, final byte[] max, final int offset,
|
||||
final int count) {
|
||||
checkIsInMulti();
|
||||
client.zrangeByScoreWithScores(key, min, max, offset, count);
|
||||
Set<Tuple> set = getBinaryTupledSet();
|
||||
return set;
|
||||
}
|
||||
|
||||
private Set<Tuple> getBinaryTupledSet() {
|
||||
checkIsInMulti();
|
||||
@@ -2439,29 +2546,32 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
|
||||
public Set<byte[]> zrevrangeByScore(final byte[] key, final double max,
|
||||
final double min, final int offset, final int count) {
|
||||
return zrevrangeByScore(key, toByteArray(max), toByteArray(min), offset, count);
|
||||
return zrevrangeByScore(key, toByteArray(max), toByteArray(min),
|
||||
offset, count);
|
||||
}
|
||||
|
||||
|
||||
public Set<byte[]> zrevrangeByScore(final byte[] key, final byte[] max,
|
||||
final byte[] min, final int offset, final int count) {
|
||||
checkIsInMulti();
|
||||
client.zrevrangeByScore(key, max, min, offset, count);
|
||||
return new LinkedHashSet<byte[]>(client.getBinaryMultiBulkReply());
|
||||
}
|
||||
final byte[] 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) {
|
||||
return zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min));
|
||||
return zrevrangeByScoreWithScores(key, toByteArray(max),
|
||||
toByteArray(min));
|
||||
}
|
||||
|
||||
public Set<Tuple> zrevrangeByScoreWithScores(final byte[] key,
|
||||
final double max, final double min, final int offset,
|
||||
final int count) {
|
||||
return zrevrangeByScoreWithScores(key, toByteArray(max), toByteArray(min), offset, count);
|
||||
return zrevrangeByScoreWithScores(key, toByteArray(max),
|
||||
toByteArray(min), offset, count);
|
||||
}
|
||||
|
||||
|
||||
public Set<Tuple> zrevrangeByScoreWithScores(final byte[] key,
|
||||
final byte[] max, final byte[] min) {
|
||||
final byte[] max, final byte[] min) {
|
||||
checkIsInMulti();
|
||||
client.zrevrangeByScoreWithScores(key, max, min);
|
||||
Set<Tuple> set = getBinaryTupledSet();
|
||||
@@ -2475,7 +2585,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
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
|
||||
@@ -2490,7 +2600,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
* operation
|
||||
*
|
||||
*/
|
||||
public Long zremrangeByRank(final byte[] key, final long start, final long end) {
|
||||
public Long zremrangeByRank(final byte[] key, final long start,
|
||||
final long end) {
|
||||
checkIsInMulti();
|
||||
client.zremrangeByRank(key, start, end);
|
||||
return client.getIntegerReply();
|
||||
@@ -2514,13 +2625,13 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
final double end) {
|
||||
return zremrangeByScore(key, toByteArray(start), toByteArray(end));
|
||||
}
|
||||
|
||||
|
||||
public Long zremrangeByScore(final byte[] key, final byte[] start,
|
||||
final byte[] end) {
|
||||
checkIsInMulti();
|
||||
client.zremrangeByScore(key, start, end);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
final byte[] end) {
|
||||
checkIsInMulti();
|
||||
client.zremrangeByScore(key, start, end);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a union or intersection of N sorted sets given by keys k1 through
|
||||
@@ -2844,7 +2955,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
client.info();
|
||||
return client.getBulkReply();
|
||||
}
|
||||
|
||||
|
||||
public String info(final String section) {
|
||||
client.info(section);
|
||||
return client.getBulkReply();
|
||||
@@ -3080,8 +3191,8 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
}
|
||||
|
||||
public Boolean setbit(byte[] key, long offset, byte[] value) {
|
||||
client.setbit(key, offset, value);
|
||||
return client.getIntegerReply() == 1;
|
||||
client.setbit(key, offset, value);
|
||||
return client.getIntegerReply() == 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3096,6 +3207,16 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
return client.getIntegerReply() == 1;
|
||||
}
|
||||
|
||||
public Long bitpos(final byte[] key, final boolean value) {
|
||||
return bitpos(key, value, new BitPosParams());
|
||||
}
|
||||
|
||||
public Long bitpos(final byte[] key, final boolean value,
|
||||
final BitPosParams params) {
|
||||
client.bitpos(key, value, params);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long setrange(byte[] key, long offset, byte[] value) {
|
||||
client.setrange(key, offset, value);
|
||||
return client.getIntegerReply();
|
||||
@@ -3142,12 +3263,13 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
|
||||
private byte[][] getParams(List<byte[]> keys, List<byte[]> args) {
|
||||
int keyCount = keys.size();
|
||||
int argCount = args.size();
|
||||
byte[][] params = new byte[keyCount + args.size()][];
|
||||
|
||||
for (int i = 0; i < keyCount; i++)
|
||||
params[i] = keys.get(i);
|
||||
|
||||
for (int i = 0; i < keys.size(); i++)
|
||||
for (int i = 0; i < argCount; i++)
|
||||
params[keyCount + i] = args.get(i);
|
||||
|
||||
return params;
|
||||
@@ -3160,44 +3282,44 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
}
|
||||
|
||||
public Object eval(byte[] script, int keyCount, byte[]... params) {
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, SafeEncoder.encode(Integer.toString(keyCount)), params);
|
||||
return client.getOne();
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, SafeEncoder.encode(Integer.toString(keyCount)),
|
||||
params);
|
||||
return client.getOne();
|
||||
}
|
||||
|
||||
public Object eval(byte[] script) {
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, 0);
|
||||
return client.getOne();
|
||||
client.setTimeoutInfinite();
|
||||
client.eval(script, 0);
|
||||
return client.getOne();
|
||||
}
|
||||
|
||||
public Object evalsha(byte[] sha1) {
|
||||
client.setTimeoutInfinite();
|
||||
client.evalsha(sha1, 0);
|
||||
return client.getOne();
|
||||
client.setTimeoutInfinite();
|
||||
client.evalsha(sha1, 0);
|
||||
return client.getOne();
|
||||
}
|
||||
|
||||
public Object evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args) {
|
||||
|
||||
int keyCount = keys == null ? 0 : keys.size();
|
||||
int argCount = args == null ? 0 : args.size();
|
||||
public Object evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args) {
|
||||
|
||||
byte[][] params = new byte[keyCount + argCount][];
|
||||
int keyCount = keys == null ? 0 : keys.size();
|
||||
int argCount = args == null ? 0 : args.size();
|
||||
|
||||
for (int i = 0; i < keyCount; i++)
|
||||
params[i] = keys.get(i);
|
||||
byte[][] params = new byte[keyCount + argCount][];
|
||||
|
||||
for (int i = 0; i < argCount; i++)
|
||||
params[keyCount + i] = args.get(i);
|
||||
for (int i = 0; i < keyCount; i++)
|
||||
params[i] = keys.get(i);
|
||||
|
||||
for (int i = 0; i < argCount; i++)
|
||||
params[keyCount + i] = args.get(i);
|
||||
|
||||
return evalsha(sha1, keyCount, params);
|
||||
}
|
||||
return evalsha(sha1, keyCount, params);
|
||||
}
|
||||
|
||||
public Object evalsha(byte[] sha1, int keyCount, byte[]... params) {
|
||||
client.setTimeoutInfinite();
|
||||
client.evalsha(sha1, keyCount, params);
|
||||
return client.getOne();
|
||||
client.setTimeoutInfinite();
|
||||
client.evalsha(sha1, keyCount, params);
|
||||
return client.getOne();
|
||||
}
|
||||
|
||||
public String scriptFlush() {
|
||||
@@ -3207,7 +3329,7 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
|
||||
public List<Long> scriptExists(byte[]... sha1) {
|
||||
client.scriptExists(sha1);
|
||||
return client.getIntegerMultiBulkReply();
|
||||
return client.getIntegerMultiBulkReply();
|
||||
}
|
||||
|
||||
public byte[] scriptLoad(byte[] script) {
|
||||
@@ -3239,133 +3361,128 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
client.slowlogGet(entries);
|
||||
return client.getBinaryMultiBulkReply();
|
||||
}
|
||||
|
||||
public Long objectRefcount(byte[] key) {
|
||||
client.objectRefcount(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public byte[] objectEncoding(byte[] key) {
|
||||
client.objectEncoding(key);
|
||||
return client.getBinaryBulkReply();
|
||||
}
|
||||
|
||||
public Long objectIdletime(byte[] key) {
|
||||
client.objectIdletime(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
public Long objectRefcount(byte[] key) {
|
||||
client.objectRefcount(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public byte[] objectEncoding(byte[] key) {
|
||||
client.objectEncoding(key);
|
||||
return client.getBinaryBulkReply();
|
||||
}
|
||||
|
||||
public Long objectIdletime(byte[] key) {
|
||||
client.objectIdletime(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long bitcount(final byte[] key) {
|
||||
client.bitcount(key);
|
||||
return client.getIntegerReply();
|
||||
client.bitcount(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long bitcount(final byte[] key, long start, long end) {
|
||||
client.bitcount(key, start, end);
|
||||
return client.getIntegerReply();
|
||||
client.bitcount(key, start, end);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys) {
|
||||
client.bitop(op, destKey, srcKeys);
|
||||
return client.getIntegerReply();
|
||||
client.bitop(op, destKey, srcKeys);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
|
||||
public byte[] dump(final byte[] key) {
|
||||
checkIsInMulti();
|
||||
client.dump(key);
|
||||
return client.getBinaryBulkReply();
|
||||
checkIsInMulti();
|
||||
client.dump(key);
|
||||
return client.getBinaryBulkReply();
|
||||
}
|
||||
|
||||
public String restore(final byte[] key, final int ttl, final byte[] serializedValue) {
|
||||
checkIsInMulti();
|
||||
client.restore(key, ttl, serializedValue);
|
||||
return client.getStatusCodeReply();
|
||||
|
||||
public String restore(final byte[] key, final int ttl,
|
||||
final byte[] serializedValue) {
|
||||
checkIsInMulti();
|
||||
client.restore(key, ttl, serializedValue);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
|
||||
@Deprecated
|
||||
public Long pexpire(final byte[] key, final int milliseconds) {
|
||||
checkIsInMulti();
|
||||
client.pexpire(key, milliseconds);
|
||||
return client.getIntegerReply();
|
||||
return pexpire(key, (long) milliseconds);
|
||||
}
|
||||
|
||||
|
||||
public Long pexpire(final byte[] key, final long milliseconds) {
|
||||
checkIsInMulti();
|
||||
client.pexpire(key, milliseconds);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Long pexpireAt(final byte[] key, final long millisecondsTimestamp) {
|
||||
checkIsInMulti();
|
||||
client.pexpireAt(key, millisecondsTimestamp);
|
||||
return client.getIntegerReply();
|
||||
checkIsInMulti();
|
||||
client.pexpireAt(key, millisecondsTimestamp);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
|
||||
public Long pttl(final byte[] key) {
|
||||
checkIsInMulti();
|
||||
client.pttl(key);
|
||||
return client.getIntegerReply();
|
||||
checkIsInMulti();
|
||||
client.pttl(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public Double incrByFloat(final byte[] key, final double increment) {
|
||||
checkIsInMulti();
|
||||
client.incrByFloat(key, increment);
|
||||
String relpy = client.getBulkReply();
|
||||
return (relpy != null ? new Double(relpy) : null);
|
||||
|
||||
public String psetex(final byte[] key, final int milliseconds,
|
||||
final byte[] value) {
|
||||
checkIsInMulti();
|
||||
client.psetex(key, milliseconds, value);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
public String psetex(final byte[] key, final int milliseconds, final byte[] value) {
|
||||
checkIsInMulti();
|
||||
client.psetex(key, milliseconds, value);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
|
||||
public String set(final byte[] key, final byte[] value, final byte[] nxxx) {
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx);
|
||||
return client.getStatusCodeReply();
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
public String set(final byte[] key, final byte[] value, final byte[] nxxx, final byte[] expx, final int time) {
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx, expx, time);
|
||||
return client.getStatusCodeReply();
|
||||
|
||||
public String set(final byte[] key, final byte[] value, final byte[] nxxx,
|
||||
final byte[] expx, final int time) {
|
||||
checkIsInMulti();
|
||||
client.set(key, value, nxxx, expx, time);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
|
||||
public String clientKill(final byte[] client) {
|
||||
checkIsInMulti();
|
||||
this.client.clientKill(client);
|
||||
return this.client.getStatusCodeReply();
|
||||
checkIsInMulti();
|
||||
this.client.clientKill(client);
|
||||
return this.client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
|
||||
public String clientGetname() {
|
||||
checkIsInMulti();
|
||||
client.clientGetname();
|
||||
return client.getBulkReply();
|
||||
checkIsInMulti();
|
||||
client.clientGetname();
|
||||
return client.getBulkReply();
|
||||
}
|
||||
|
||||
|
||||
public String clientList() {
|
||||
checkIsInMulti();
|
||||
client.clientList();
|
||||
return client.getBulkReply();
|
||||
checkIsInMulti();
|
||||
client.clientList();
|
||||
return client.getBulkReply();
|
||||
}
|
||||
|
||||
|
||||
public String clientSetname(final byte[] name) {
|
||||
checkIsInMulti();
|
||||
client.clientSetname(name);
|
||||
return client.getBulkReply();
|
||||
checkIsInMulti();
|
||||
client.clientSetname(name);
|
||||
return client.getBulkReply();
|
||||
}
|
||||
|
||||
|
||||
public List<String> time() {
|
||||
checkIsInMulti();
|
||||
client.time();
|
||||
return client.getMultiBulkReply();
|
||||
checkIsInMulti();
|
||||
client.time();
|
||||
return client.getMultiBulkReply();
|
||||
}
|
||||
|
||||
public String migrate(final byte[] host, final int port, final byte[] key, final int destinationDb, final int timeout) {
|
||||
checkIsInMulti();
|
||||
client.migrate(host, port, key, destinationDb, timeout);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
public Double hincrByFloat(final byte[] key, final byte[] field, double increment) {
|
||||
checkIsInMulti();
|
||||
client.hincrByFloat(key, field, increment);
|
||||
String relpy = client.getBulkReply();
|
||||
return (relpy != null ? new Double(relpy) : null);
|
||||
|
||||
public String migrate(final byte[] host, final int port, final byte[] key,
|
||||
final int destinationDb, final int timeout) {
|
||||
checkIsInMulti();
|
||||
client.migrate(host, port, key, destinationDb, timeout);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3376,9 +3493,104 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
|
||||
* so I had to change the name of the method. Sorry :S
|
||||
*/
|
||||
public Long waitReplicas(int replicas, long timeout) {
|
||||
checkIsInMulti();
|
||||
client.waitReplicas(replicas, timeout);
|
||||
return client.getIntegerReply();
|
||||
checkIsInMulti();
|
||||
client.waitReplicas(replicas, timeout);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long pfadd(final byte[] key, final byte[]... elements) {
|
||||
checkIsInMulti();
|
||||
client.pfadd(key, elements);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long pfcount(final byte[] key) {
|
||||
checkIsInMulti();
|
||||
client.pfcount(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String pfmerge(final byte[] destkey, final byte[]... sourcekeys) {
|
||||
checkIsInMulti();
|
||||
client.pfmerge(destkey, sourcekeys);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long pfcount(byte[]... keys) {
|
||||
checkIsInMulti();
|
||||
client.pfcount(keys);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> scan(final byte[] cursor) {
|
||||
return scan(cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> scan(final byte[] cursor, final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.scan(cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
return new ScanResult<byte[]>(newcursor, rawResults);
|
||||
}
|
||||
|
||||
public ScanResult<Map.Entry<byte[], byte[]>> hscan(final byte[] key,
|
||||
final byte[] cursor) {
|
||||
return hscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<Map.Entry<byte[], byte[]>> hscan(final byte[] key,
|
||||
final byte[] cursor, final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.hscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<Map.Entry<byte[], byte[]>> results = new ArrayList<Map.Entry<byte[], byte[]>>();
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
Iterator<byte[]> iterator = rawResults.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
results.add(new AbstractMap.SimpleEntry<byte[], byte[]>(iterator
|
||||
.next(), iterator.next()));
|
||||
}
|
||||
return new ScanResult<Map.Entry<byte[], byte[]>>(newcursor, results);
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> sscan(final byte[] key, final byte[] cursor) {
|
||||
return sscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<byte[]> sscan(final byte[] key, final byte[] cursor,
|
||||
final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.sscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
return new ScanResult<byte[]>(newcursor, rawResults);
|
||||
}
|
||||
|
||||
public ScanResult<Tuple> zscan(final byte[] key, final byte[] cursor) {
|
||||
return zscan(key, cursor, new ScanParams());
|
||||
}
|
||||
|
||||
public ScanResult<Tuple> zscan(final byte[] key, final byte[] cursor,
|
||||
final ScanParams params) {
|
||||
checkIsInMulti();
|
||||
client.zscan(key, cursor, params);
|
||||
List<Object> result = client.getObjectMultiBulkReply();
|
||||
byte[] newcursor = (byte[]) result.get(0);
|
||||
List<Tuple> results = new ArrayList<Tuple>();
|
||||
List<byte[]> rawResults = (List<byte[]>) result.get(1);
|
||||
Iterator<byte[]> iterator = rawResults.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
results.add(new Tuple(iterator.next(), Double.valueOf(SafeEncoder
|
||||
.encode(iterator.next()))));
|
||||
}
|
||||
return new ScanResult<Tuple>(newcursor, results);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user