Merge pull request #615 from xetorthio/hll-resurrect-afefb71e57b0258a52b465b2b4e57c132aef4db9
Support for HLL
This commit is contained in:
@@ -1,26 +1,22 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
import static redis.clients.jedis.Protocol.toByteArray;
|
||||
import static redis.clients.jedis.Protocol.Command.*;
|
||||
import static redis.clients.jedis.Protocol.Keyword.ENCODING;
|
||||
import static redis.clients.jedis.Protocol.Keyword.IDLETIME;
|
||||
import static redis.clients.jedis.Protocol.Keyword.LEN;
|
||||
import static redis.clients.jedis.Protocol.Keyword.LIMIT;
|
||||
import static redis.clients.jedis.Protocol.Keyword.NO;
|
||||
import static redis.clients.jedis.Protocol.Keyword.ONE;
|
||||
import static redis.clients.jedis.Protocol.Keyword.REFCOUNT;
|
||||
import static redis.clients.jedis.Protocol.Keyword.RESET;
|
||||
import static redis.clients.jedis.Protocol.Keyword.STORE;
|
||||
import static redis.clients.jedis.Protocol.Keyword.WITHSCORES;
|
||||
import redis.clients.jedis.Protocol.Command;
|
||||
import redis.clients.jedis.Protocol.Keyword;
|
||||
import redis.clients.util.SafeEncoder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import redis.clients.jedis.Protocol.Command;
|
||||
import redis.clients.jedis.Protocol.Keyword;
|
||||
import redis.clients.util.SafeEncoder;
|
||||
import static redis.clients.jedis.Protocol.Command.*;
|
||||
import static redis.clients.jedis.Protocol.Command.EXISTS;
|
||||
import static redis.clients.jedis.Protocol.Command.PSUBSCRIBE;
|
||||
import static redis.clients.jedis.Protocol.Command.PUNSUBSCRIBE;
|
||||
import static redis.clients.jedis.Protocol.Command.SUBSCRIBE;
|
||||
import static redis.clients.jedis.Protocol.Command.UNSUBSCRIBE;
|
||||
import static redis.clients.jedis.Protocol.Keyword.*;
|
||||
import static redis.clients.jedis.Protocol.toByteArray;
|
||||
|
||||
public class BinaryClient extends Connection {
|
||||
public enum LIST_POSITION {
|
||||
@@ -320,7 +316,7 @@ public class BinaryClient extends Connection {
|
||||
public void sadd(final byte[] key, final byte[]... members) {
|
||||
sendCommand(SADD, joinParameters(key, members));
|
||||
}
|
||||
|
||||
|
||||
public void smembers(final byte[] key) {
|
||||
sendCommand(SMEMBERS, key);
|
||||
}
|
||||
@@ -1253,4 +1249,20 @@ public class BinaryClient extends Connection {
|
||||
public void asking() {
|
||||
sendCommand(Command.ASKING);
|
||||
}
|
||||
|
||||
public void pfadd(final byte[] key, final byte[]... elements) {
|
||||
sendCommand(PFADD, joinParameters(key, elements));
|
||||
}
|
||||
|
||||
public void pfcount(final byte[] key) {
|
||||
sendCommand(PFCOUNT, key);
|
||||
}
|
||||
|
||||
public void pfcount(final byte[]...keys) {
|
||||
sendCommand(PFCOUNT, keys);
|
||||
}
|
||||
|
||||
public void pfmerge(final byte[] destkey, final byte[]... sourcekeys) {
|
||||
sendCommand(PFMERGE, joinParameters(destkey, sourcekeys));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3417,4 +3417,32 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands,
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -211,4 +211,8 @@ public interface BinaryJedisCommands {
|
||||
Long bitcount(final byte[] key);
|
||||
|
||||
Long bitcount(final byte[] key, long start, long end);
|
||||
|
||||
Long pfadd(final byte[] key, final byte[]... elements);
|
||||
|
||||
long pfcount(final byte[] key);
|
||||
}
|
||||
|
||||
@@ -210,4 +210,8 @@ public interface BinaryRedisPipeline {
|
||||
Response<Long> bitcount(byte[] key);
|
||||
|
||||
Response<Long> bitcount(byte[] key, long start, long end);
|
||||
|
||||
Response<Long> pfadd(final byte[] key, final byte[]... elements);
|
||||
|
||||
Response<Long> pfcount(final byte[] key);
|
||||
}
|
||||
|
||||
@@ -569,4 +569,17 @@ public class BinaryShardedJedis extends Sharded<Jedis, JedisShardInfo>
|
||||
Jedis j = getShard(key);
|
||||
return j.bitcount(key, start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long pfadd(final byte[] key, final byte[]... elements) {
|
||||
Jedis j = getShard(key);
|
||||
return j.pfadd(key, elements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long pfcount(final byte[] key) {
|
||||
Jedis j = getShard(key);
|
||||
return j.pfcount(key);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
import static redis.clients.jedis.Protocol.toByteArray;
|
||||
import redis.clients.util.SafeEncoder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -8,7 +8,7 @@ import java.util.List;
|
||||
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) {
|
||||
@@ -951,4 +951,20 @@ public class Client extends BinaryClient implements Commands {
|
||||
cluster(Protocol.CLUSTER_SETSLOT, String.valueOf(slot),
|
||||
Protocol.CLUSTER_SETSLOT_IMPORTING, nodeId);
|
||||
}
|
||||
|
||||
public void pfadd(String key, final String... elements) {
|
||||
pfadd(SafeEncoder.encode(key), SafeEncoder.encodeMany(elements));
|
||||
}
|
||||
|
||||
public void pfcount(final String key) {
|
||||
pfcount(SafeEncoder.encode(key));
|
||||
}
|
||||
|
||||
public void pfcount(final String...keys) {
|
||||
pfcount(SafeEncoder.encodeMany(keys));
|
||||
}
|
||||
|
||||
public void pfmerge(final String destkey, final String... sourcekeys) {
|
||||
pfmerge(SafeEncoder.encode(destkey), SafeEncoder.encodeMany(sourcekeys));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
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.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||
import redis.clients.util.SafeEncoder;
|
||||
import redis.clients.util.Slowlog;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class Jedis extends BinaryJedis implements JedisCommands,
|
||||
MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands,
|
||||
BasicCommands, ClusterCommands {
|
||||
@@ -3412,4 +3405,29 @@ public class Jedis extends BinaryJedis implements JedisCommands,
|
||||
return BuilderFactory.STRING_MAP
|
||||
.build(client.getBinaryMultiBulkReply());
|
||||
}
|
||||
|
||||
public Long pfadd(final String key, final String... elements) {
|
||||
checkIsInMulti();
|
||||
client.pfadd(key, elements);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public long pfcount(final String key) {
|
||||
checkIsInMulti();
|
||||
client.pfcount(key);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long pfcount(String... keys) {
|
||||
checkIsInMulti();
|
||||
client.pfcount(keys);
|
||||
return client.getIntegerReply();
|
||||
}
|
||||
|
||||
public String pfmerge(final String destkey, final String... sourcekeys) {
|
||||
checkIsInMulti();
|
||||
client.pfmerge(destkey, sourcekeys);
|
||||
return client.getStatusCodeReply();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||
|
||||
public class JedisCluster implements JedisCommands, BasicCommands {
|
||||
public static final short HASHSLOTS = 16384;
|
||||
private static final int DEFAULT_TIMEOUT = 1;
|
||||
@@ -1493,4 +1493,26 @@ public class JedisCluster implements JedisCommands, BasicCommands {
|
||||
}
|
||||
}.run(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long pfadd(final String key, final String... elements) {
|
||||
return new JedisClusterCommand<Long>(connectionHandler,
|
||||
timeout, maxRedirections) {
|
||||
@Override
|
||||
public Long execute(Jedis connection) {
|
||||
return connection.pfadd(key, elements);
|
||||
}
|
||||
}.run(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long pfcount(final String key) {
|
||||
return new JedisClusterCommand<Long>(connectionHandler,
|
||||
timeout, maxRedirections) {
|
||||
@Override
|
||||
public Long execute(Jedis connection) {
|
||||
return connection.pfcount(key);
|
||||
}
|
||||
}.run(key);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import redis.clients.jedis.exceptions.JedisAskDataException;
|
||||
import redis.clients.jedis.exceptions.JedisClusterException;
|
||||
import redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException;
|
||||
import redis.clients.jedis.exceptions.JedisConnectionException;
|
||||
import redis.clients.jedis.exceptions.JedisException;
|
||||
import redis.clients.jedis.exceptions.JedisMovedDataException;
|
||||
import redis.clients.jedis.exceptions.JedisRedirectionException;
|
||||
import redis.clients.util.JedisClusterCRC16;
|
||||
|
||||
@@ -243,4 +243,9 @@ public interface JedisCommands {
|
||||
ScanResult<String> sscan(final String key, final String cursor);
|
||||
|
||||
ScanResult<Tuple> zscan(final String key, final String cursor);
|
||||
|
||||
Long pfadd(final String key, final String... elements);
|
||||
|
||||
long pfcount(final String key);
|
||||
|
||||
}
|
||||
|
||||
@@ -69,4 +69,8 @@ public interface MultiKeyBinaryCommands {
|
||||
byte[] randomBinaryKey();
|
||||
|
||||
Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys);
|
||||
|
||||
String pfmerge(final byte[] destkey, final byte[]... sourcekeys);
|
||||
|
||||
Long pfcount(byte[]... keys);
|
||||
}
|
||||
|
||||
@@ -65,4 +65,8 @@ public interface MultiKeyBinaryRedisPipeline {
|
||||
Response<byte[]> randomKeyBinary();
|
||||
|
||||
Response<Long> bitop(BitOP op, final byte[] destKey, byte[]... srcKeys);
|
||||
|
||||
Response<String> pfmerge(final byte[] destkey, final byte[]... sourcekeys);
|
||||
|
||||
Response<Long> pfcount(final byte[] ... keys);
|
||||
}
|
||||
|
||||
@@ -79,4 +79,8 @@ public interface MultiKeyCommands {
|
||||
ScanResult<String> scan(int cursor);
|
||||
|
||||
ScanResult<String> scan(final String cursor);
|
||||
|
||||
String pfmerge(final String destkey, final String... sourcekeys);
|
||||
|
||||
long pfcount(final String...keys);
|
||||
}
|
||||
|
||||
@@ -64,4 +64,8 @@ public interface MultiKeyCommandsPipeline {
|
||||
Response<String> randomKey();
|
||||
|
||||
Response<Long> bitop(BitOP op, final String destKey, String... srcKeys);
|
||||
|
||||
Response<String> pfmerge(final String destkey, final String... sourcekeys);
|
||||
|
||||
Response<Long> pfcount(final String...keys);
|
||||
}
|
||||
|
||||
@@ -446,4 +446,28 @@ abstract class MultiKeyPipelineBase extends PipelineBase implements
|
||||
client.clusterSetSlotImporting(slot, nodeId);
|
||||
return getResponse(BuilderFactory.STRING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<String> pfmerge(byte[] destkey, byte[]... sourcekeys) {
|
||||
client.pfmerge(destkey, sourcekeys);
|
||||
return getResponse(BuilderFactory.STRING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<String> pfmerge(String destkey, String... sourcekeys) {
|
||||
client.pfmerge(destkey, sourcekeys);
|
||||
return getResponse(BuilderFactory.STRING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfcount(String...keys) {
|
||||
client.pfcount(keys);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfcount(final byte[] ... keys) {
|
||||
client.pfcount(keys);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,5 +124,5 @@ public class Pipeline extends MultiKeyPipelineBase {
|
||||
currentMulti = new MultiResponseBuilder();
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1204,4 +1204,28 @@ abstract class PipelineBase extends Queable implements BinaryRedisPipeline,
|
||||
return getResponse(BuilderFactory.STRING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfadd(byte[] key, byte[]... elements) {
|
||||
getClient(key).pfadd(key, elements);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfcount(byte[] key) {
|
||||
getClient(key).pfcount(key);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfadd(String key, String... elements) {
|
||||
getClient(key).pfadd(key, elements);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<Long> pfcount(String key) {
|
||||
getClient(key).pfcount(key);
|
||||
return getResponse(BuilderFactory.LONG);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -208,7 +208,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, PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING;
|
||||
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, PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING, PFADD, PFCOUNT, PFMERGE;
|
||||
|
||||
public final byte[] raw;
|
||||
|
||||
|
||||
@@ -188,4 +188,8 @@ public interface RedisPipeline {
|
||||
Response<Long> bitcount(String key);
|
||||
|
||||
Response<Long> bitcount(String key, long start, long end);
|
||||
|
||||
Response<Long> pfadd(final String key, final String... elements);
|
||||
|
||||
Response<Long> pfcount(final String key);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package redis.clients.jedis;
|
||||
|
||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||
import redis.clients.util.Hashing;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||
import redis.clients.util.Hashing;
|
||||
|
||||
public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
||||
public ShardedJedis(List<JedisShardInfo> shards) {
|
||||
super(shards);
|
||||
@@ -577,4 +577,16 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
||||
Jedis j = getShard(key);
|
||||
return j.zscan(key, cursor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long pfadd(String key, String... elements) {
|
||||
Jedis j = getShard(key);
|
||||
return j.pfadd(key, elements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long pfcount(String key) {
|
||||
Jedis j = getShard(key);
|
||||
return j.pfcount(key);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
package redis.clients.jedis.tests.commands;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import redis.clients.util.SafeEncoder;
|
||||
|
||||
public class HyperLogLogCommandsTest extends JedisCommandTestBase {
|
||||
|
||||
@Test
|
||||
public void pfadd() {
|
||||
long status = jedis.pfadd("foo", "a");
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd("foo", "a");
|
||||
assertEquals(0, status);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfaddBinary() {
|
||||
byte[] bFoo = SafeEncoder.encode("foo");
|
||||
byte[] bBar = SafeEncoder.encode("bar");
|
||||
byte[] bBar2 = SafeEncoder.encode("bar2");
|
||||
|
||||
long status = jedis.pfadd(bFoo, bBar, bBar2);
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd(bFoo, bBar, bBar2);
|
||||
assertEquals(0, status);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfcount() {
|
||||
long status = jedis.pfadd("hll", "foo", "bar", "zap");
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd("hll", "zap", "zap", "zap");
|
||||
assertEquals(0, status);
|
||||
|
||||
status = jedis.pfadd("hll", "foo", "bar");
|
||||
assertEquals(0, status);
|
||||
|
||||
status = jedis.pfcount("hll");
|
||||
assertEquals(3, status);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfcounts() {
|
||||
long status = jedis.pfadd("hll_1", "foo", "bar", "zap");
|
||||
assertEquals(1, status);
|
||||
status = jedis.pfadd("hll_2", "foo", "bar", "zap");
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd("hll_3", "foo", "bar", "baz");
|
||||
assertEquals(1, status);
|
||||
status = jedis.pfcount("hll_1");
|
||||
assertEquals(3, status);
|
||||
status = jedis.pfcount("hll_2");
|
||||
assertEquals(3, status);
|
||||
status = jedis.pfcount("hll_3");
|
||||
assertEquals(3, status);
|
||||
|
||||
status = jedis.pfcount("hll_1", "hll_2");
|
||||
assertEquals(3, status);
|
||||
|
||||
status = jedis.pfcount("hll_1", "hll_2", "hll_3");
|
||||
assertEquals(4, status);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfcountBinary() {
|
||||
byte[] bHll = SafeEncoder.encode("hll");
|
||||
byte[] bFoo = SafeEncoder.encode("foo");
|
||||
byte[] bBar = SafeEncoder.encode("bar");
|
||||
byte[] bZap = SafeEncoder.encode("zap");
|
||||
|
||||
long status = jedis.pfadd(bHll, bFoo, bBar, bZap);
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd(bHll, bZap, bZap, bZap);
|
||||
assertEquals(0, status);
|
||||
|
||||
status = jedis.pfadd(bHll, bFoo, bBar);
|
||||
assertEquals(0, status);
|
||||
|
||||
status = jedis.pfcount(bHll);
|
||||
assertEquals(3, status);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfmerge() {
|
||||
long status = jedis.pfadd("hll1", "foo", "bar", "zap", "a");
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd("hll2", "a", "b", "c", "foo");
|
||||
assertEquals(1, status);
|
||||
|
||||
String mergeStatus = jedis.pfmerge("hll3", "hll1", "hll2");
|
||||
assertEquals("OK", mergeStatus);
|
||||
|
||||
status = jedis.pfcount("hll3");
|
||||
assertEquals(6, status);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pfmergeBinary() {
|
||||
byte[] bHll1 = SafeEncoder.encode("hll1");
|
||||
byte[] bHll2 = SafeEncoder.encode("hll2");
|
||||
byte[] bHll3 = SafeEncoder.encode("hll3");
|
||||
byte[] bFoo = SafeEncoder.encode("foo");
|
||||
byte[] bBar = SafeEncoder.encode("bar");
|
||||
byte[] bZap = SafeEncoder.encode("zap");
|
||||
byte[] bA = SafeEncoder.encode("a");
|
||||
byte[] bB = SafeEncoder.encode("b");
|
||||
byte[] bC = SafeEncoder.encode("c");
|
||||
|
||||
long status = jedis.pfadd(bHll1, bFoo, bBar, bZap, bA);
|
||||
assertEquals(1, status);
|
||||
|
||||
status = jedis.pfadd(bHll2, bA, bB, bC, bFoo);
|
||||
assertEquals(1, status);
|
||||
|
||||
String mergeStatus = jedis.pfmerge(bHll3, bHll1, bHll2);
|
||||
assertEquals("OK", mergeStatus);
|
||||
|
||||
status = jedis.pfcount("hll3");
|
||||
assertEquals(6, status);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user