Added incrByFloat and hincrByFloat commands (binary and standard) + support for pipelining and sharding
This commit is contained in:
@@ -192,6 +192,10 @@ public class BinaryClient extends Connection {
|
||||
sendCommand(INCRBY, key, toByteArray(integer));
|
||||
}
|
||||
|
||||
public void incrByFloat(final byte[] key, final double value) {
|
||||
sendCommand(INCRBYFLOAT, key, toByteArray(value));
|
||||
}
|
||||
|
||||
public void incr(final byte[] key) {
|
||||
sendCommand(INCR, key);
|
||||
}
|
||||
@@ -238,6 +242,10 @@ public class BinaryClient extends Connection {
|
||||
sendCommand(HINCRBY, key, field, toByteArray(value));
|
||||
}
|
||||
|
||||
public void hincrByFloat(final byte[] key, final byte[] field, final double value) {
|
||||
sendCommand(HINCRBYFLOAT, key, field, toByteArray(value));
|
||||
}
|
||||
|
||||
public void hexists(final byte[] key, final byte[] field) {
|
||||
sendCommand(HEXISTS, key, field);
|
||||
}
|
||||
|
||||
@@ -602,6 +602,36 @@ public class BinaryJedis implements BinaryJedisCommands {
|
||||
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
|
||||
@@ -794,6 +824,32 @@ public class BinaryJedis implements BinaryJedisCommands {
|
||||
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.
|
||||
*
|
||||
|
||||
@@ -37,6 +37,8 @@ public interface BinaryJedisCommands {
|
||||
|
||||
Long incrBy(byte[] key, long integer);
|
||||
|
||||
Double incrByFloat(byte[] key, double value);
|
||||
|
||||
Long incr(byte[] key);
|
||||
|
||||
Long append(byte[] key, byte[] value);
|
||||
@@ -55,6 +57,8 @@ public interface BinaryJedisCommands {
|
||||
|
||||
Long hincrBy(byte[] key, byte[] field, long value);
|
||||
|
||||
Double hincrByFloat(byte[] key, byte[] field, double value);
|
||||
|
||||
Boolean hexists(byte[] key, byte[] field);
|
||||
|
||||
Long hdel(byte[] key, byte[]... field);
|
||||
|
||||
@@ -110,6 +110,11 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
|
||||
return j.incrBy(key, integer);
|
||||
}
|
||||
|
||||
public Double incrByFloat(byte[] key, double integer) {
|
||||
Jedis j = getShard(key);
|
||||
return j.incrByFloat(key, integer);
|
||||
}
|
||||
|
||||
public Long incr(byte[] key) {
|
||||
Jedis j = getShard(key);
|
||||
return j.incr(key);
|
||||
@@ -155,6 +160,11 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
|
||||
return j.hincrBy(key, field, value);
|
||||
}
|
||||
|
||||
public Double hincrByFloat(byte[] key, byte[] field, double value) {
|
||||
Jedis j = getShard(key);
|
||||
return j.hincrByFloat(key, field, value);
|
||||
}
|
||||
|
||||
public Boolean hexists(byte[] key, byte[] field) {
|
||||
Jedis j = getShard(key);
|
||||
return j.hexists(key, field);
|
||||
|
||||
@@ -117,6 +117,10 @@ public class Client extends BinaryClient implements Commands {
|
||||
incrBy(SafeEncoder.encode(key), integer);
|
||||
}
|
||||
|
||||
public void incrByFloat(final String key, final double value) {
|
||||
incrByFloat(SafeEncoder.encode(key), value);
|
||||
}
|
||||
|
||||
public void incr(final String key) {
|
||||
incr(SafeEncoder.encode(key));
|
||||
}
|
||||
@@ -165,6 +169,10 @@ public class Client extends BinaryClient implements Commands {
|
||||
hincrBy(SafeEncoder.encode(key), SafeEncoder.encode(field), value);
|
||||
}
|
||||
|
||||
public void hincrByFloat(final String key, final String field, final double value) {
|
||||
hincrByFloat(SafeEncoder.encode(key), SafeEncoder.encode(field), value);
|
||||
}
|
||||
|
||||
public void hexists(final String key, final String field) {
|
||||
hexists(SafeEncoder.encode(key), SafeEncoder.encode(field));
|
||||
}
|
||||
|
||||
@@ -56,6 +56,8 @@ public interface Commands {
|
||||
|
||||
public void incrBy(final String key, final long integer);
|
||||
|
||||
public void incrByFloat(final String key, final double value);
|
||||
|
||||
public void incr(final String key);
|
||||
|
||||
public void append(final String key, final String value);
|
||||
@@ -74,6 +76,8 @@ public interface Commands {
|
||||
|
||||
public void hincrBy(final String key, final String field, final long value);
|
||||
|
||||
public void hincrByFloat(final String key, final String field, final double value);
|
||||
|
||||
public void hexists(final String key, final String field);
|
||||
|
||||
public void hdel(final String key, final String... fields);
|
||||
|
||||
@@ -572,6 +572,31 @@ public class Jedis extends BinaryJedis implements JedisCommands {
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
/**
|
||||
* INCRBYFLOAT
|
||||
* <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)
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
* @return Double reply, this commands will reply with the new value of key
|
||||
* after the increment.
|
||||
*/
|
||||
public Double incrByFloat(final String key, final double value) {
|
||||
checkIsInMulti();
|
||||
client.incrByFloat(key, value);
|
||||
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
|
||||
@@ -764,6 +789,32 @@ public class Jedis extends BinaryJedis implements JedisCommands {
|
||||
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 String key, final String 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.
|
||||
*
|
||||
|
||||
@@ -275,6 +275,16 @@ public class Pipeline extends Queable {
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
public Response<Double> hincrByFloat(String key, String field, double value) {
|
||||
client.hincrByFloat(key, field, value);
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Double> hincrByFloat(byte[] key, byte[] field, double value) {
|
||||
client.hincrByFloat(key, field, value);
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Set<String>> hkeys(String key) {
|
||||
client.hkeys(key);
|
||||
return getResponse(BuilderFactory.STRING_SET);
|
||||
@@ -365,6 +375,16 @@ public class Pipeline extends Queable {
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
public Response<Double> incrByFloat(String key, double value) {
|
||||
client.incrByFloat(key, value);
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Double> incrByFloat(byte[] key, double value) {
|
||||
client.incrByFloat(key, value);
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Set<String>> keys(String pattern) {
|
||||
client.keys(pattern);
|
||||
return getResponse(BuilderFactory.STRING_SET);
|
||||
|
||||
@@ -144,7 +144,7 @@ public final class Protocol {
|
||||
}
|
||||
|
||||
public static enum Command {
|
||||
PING, SET, GET, QUIT, EXISTS, DEL, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT;
|
||||
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, INCRBYFLOAT, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HINCRBYFLOAT, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT;
|
||||
|
||||
public final byte[] raw;
|
||||
|
||||
|
||||
@@ -118,6 +118,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
||||
return j.incrBy(key, integer);
|
||||
}
|
||||
|
||||
public Double incrByFloat(String key, double integer) {
|
||||
Jedis j = getShard(key);
|
||||
return j.incrByFloat(key, integer);
|
||||
}
|
||||
|
||||
public Long incr(String key) {
|
||||
Jedis j = getShard(key);
|
||||
return j.incr(key);
|
||||
@@ -163,6 +168,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
||||
return j.hincrBy(key, field, value);
|
||||
}
|
||||
|
||||
public Double hincrByFloat(String key, String field, double value) {
|
||||
Jedis j = getShard(key);
|
||||
return j.hincrByFloat(key, field, value);
|
||||
}
|
||||
|
||||
public Boolean hexists(String key, String field) {
|
||||
Jedis j = getShard(key);
|
||||
return j.hexists(key, field);
|
||||
|
||||
@@ -123,6 +123,13 @@ public class ShardedJedisPipeline extends Queable {
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
public Response<Double> incrByFloat(String key, double value) {
|
||||
Client c = getClient(key);
|
||||
c.incrByFloat(key, value);
|
||||
results.add(new FutureResult(c));
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Long> incr(String key) {
|
||||
Client c = getClient(key);
|
||||
c.incr(key);
|
||||
@@ -186,6 +193,13 @@ public class ShardedJedisPipeline extends Queable {
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
public Response<Double> hincrByFloat(String key, String field, double value) {
|
||||
Client c = getClient(key);
|
||||
c.hincrByFloat(key, field, value);
|
||||
results.add(new FutureResult(c));
|
||||
return getResponse(BuilderFactory.DOUBLE);
|
||||
}
|
||||
|
||||
public Response<Boolean> hexists(String key, String field) {
|
||||
Client c = getClient(key);
|
||||
c.hexists(key, field);
|
||||
|
||||
Reference in New Issue
Block a user