Merge pull request #627 from aloksingh/hll-pfcount-with-multiple-keys
Add support for pfcount with multiple keys
This commit is contained in:
@@ -1,26 +1,22 @@
|
|||||||
package redis.clients.jedis;
|
package redis.clients.jedis;
|
||||||
|
|
||||||
import static redis.clients.jedis.Protocol.toByteArray;
|
import redis.clients.jedis.Protocol.Command;
|
||||||
import static redis.clients.jedis.Protocol.Command.*;
|
import redis.clients.jedis.Protocol.Keyword;
|
||||||
import static redis.clients.jedis.Protocol.Keyword.ENCODING;
|
import redis.clients.util.SafeEncoder;
|
||||||
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 java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import redis.clients.jedis.Protocol.Command;
|
import static redis.clients.jedis.Protocol.Command.*;
|
||||||
import redis.clients.jedis.Protocol.Keyword;
|
import static redis.clients.jedis.Protocol.Command.EXISTS;
|
||||||
import redis.clients.util.SafeEncoder;
|
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 class BinaryClient extends Connection {
|
||||||
public enum LIST_POSITION {
|
public enum LIST_POSITION {
|
||||||
@@ -1262,6 +1258,10 @@ public class BinaryClient extends Connection {
|
|||||||
sendCommand(PFCOUNT, key);
|
sendCommand(PFCOUNT, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void pfcount(final byte[]...keys) {
|
||||||
|
sendCommand(PFCOUNT, keys);
|
||||||
|
}
|
||||||
|
|
||||||
public void pfmerge(final byte[] destkey, final byte[]... sourcekeys) {
|
public void pfmerge(final byte[] destkey, final byte[]... sourcekeys) {
|
||||||
sendCommand(PFMERGE, joinParameters(destkey, sourcekeys));
|
sendCommand(PFMERGE, joinParameters(destkey, sourcekeys));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3438,4 +3438,11 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands,
|
|||||||
return client.getStatusCodeReply();
|
return client.getStatusCodeReply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long pfcount(byte[]... keys) {
|
||||||
|
checkIsInMulti();
|
||||||
|
client.pfcount(keys);
|
||||||
|
return client.getIntegerReply();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package redis.clients.jedis;
|
package redis.clients.jedis;
|
||||||
|
|
||||||
import static redis.clients.jedis.Protocol.toByteArray;
|
import redis.clients.util.SafeEncoder;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -8,7 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
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 class Client extends BinaryClient implements Commands {
|
||||||
public Client(final String host) {
|
public Client(final String host) {
|
||||||
@@ -960,6 +960,10 @@ public class Client extends BinaryClient implements Commands {
|
|||||||
pfcount(SafeEncoder.encode(key));
|
pfcount(SafeEncoder.encode(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void pfcount(final String...keys) {
|
||||||
|
pfcount(SafeEncoder.encodeMany(keys));
|
||||||
|
}
|
||||||
|
|
||||||
public void pfmerge(final String destkey, final String... sourcekeys) {
|
public void pfmerge(final String destkey, final String... sourcekeys) {
|
||||||
pfmerge(SafeEncoder.encode(destkey), SafeEncoder.encodeMany(sourcekeys));
|
pfmerge(SafeEncoder.encode(destkey), SafeEncoder.encodeMany(sourcekeys));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,13 @@
|
|||||||
package redis.clients.jedis;
|
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.jedis.BinaryClient.LIST_POSITION;
|
||||||
import redis.clients.util.SafeEncoder;
|
import redis.clients.util.SafeEncoder;
|
||||||
import redis.clients.util.Slowlog;
|
import redis.clients.util.Slowlog;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
public class Jedis extends BinaryJedis implements JedisCommands,
|
public class Jedis extends BinaryJedis implements JedisCommands,
|
||||||
MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands,
|
MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands,
|
||||||
BasicCommands, ClusterCommands {
|
BasicCommands, ClusterCommands {
|
||||||
@@ -3425,6 +3418,13 @@ public class Jedis extends BinaryJedis implements JedisCommands,
|
|||||||
return client.getIntegerReply();
|
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) {
|
public String pfmerge(final String destkey, final String... sourcekeys) {
|
||||||
checkIsInMulti();
|
checkIsInMulti();
|
||||||
client.pfmerge(destkey, sourcekeys);
|
client.pfmerge(destkey, sourcekeys);
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package redis.clients.jedis;
|
package redis.clients.jedis;
|
||||||
|
|
||||||
|
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
|
||||||
|
|
||||||
public class JedisCluster implements JedisCommands, BasicCommands {
|
public class JedisCluster implements JedisCommands, BasicCommands {
|
||||||
public static final short HASHSLOTS = 16384;
|
public static final short HASHSLOTS = 16384;
|
||||||
private static final int DEFAULT_TIMEOUT = 1;
|
private static final int DEFAULT_TIMEOUT = 1;
|
||||||
@@ -1503,5 +1503,4 @@ public class JedisCluster implements JedisCommands, BasicCommands {
|
|||||||
}
|
}
|
||||||
}.run(key);
|
}.run(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,4 +244,5 @@ public interface JedisCommands {
|
|||||||
Long pfadd(final String key, final String... elements);
|
Long pfadd(final String key, final String... elements);
|
||||||
|
|
||||||
long pfcount(final String key);
|
long pfcount(final String key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,4 +71,6 @@ public interface MultiKeyBinaryCommands {
|
|||||||
Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys);
|
Long bitop(BitOP op, final byte[] destKey, byte[]... srcKeys);
|
||||||
|
|
||||||
String pfmerge(final byte[] destkey, final byte[]... sourcekeys);
|
String pfmerge(final byte[] destkey, final byte[]... sourcekeys);
|
||||||
|
|
||||||
|
Long pfcount(byte[]... keys);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,4 +81,6 @@ public interface MultiKeyCommands {
|
|||||||
ScanResult<String> scan(final String cursor);
|
ScanResult<String> scan(final String cursor);
|
||||||
|
|
||||||
String pfmerge(final String destkey, final String... sourcekeys);
|
String pfmerge(final String destkey, final String... sourcekeys);
|
||||||
|
|
||||||
|
long pfcount(final String...keys);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,4 +66,6 @@ public interface MultiKeyCommandsPipeline {
|
|||||||
Response<Long> bitop(BitOP op, final String destKey, String... srcKeys);
|
Response<Long> bitop(BitOP op, final String destKey, String... srcKeys);
|
||||||
|
|
||||||
Response<String> pfmerge(final String destkey, final String... sourcekeys);
|
Response<String> pfmerge(final String destkey, final String... sourcekeys);
|
||||||
|
|
||||||
|
Response<Long> pfcount(final String...keys);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -458,4 +458,10 @@ abstract class MultiKeyPipelineBase extends PipelineBase implements
|
|||||||
client.pfmerge(destkey, sourcekeys);
|
client.pfmerge(destkey, sourcekeys);
|
||||||
return getResponse(BuilderFactory.STRING);
|
return getResponse(BuilderFactory.STRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response<Long> pfcount(String...keys) {
|
||||||
|
client.pfcount(keys);
|
||||||
|
return getResponse(BuilderFactory.LONG);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package redis.clients.jedis;
|
package redis.clients.jedis;
|
||||||
|
|
||||||
|
import redis.clients.jedis.BinaryClient.LIST_POSITION;
|
||||||
|
import redis.clients.util.Hashing;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Pattern;
|
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 class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
||||||
public ShardedJedis(List<JedisShardInfo> shards) {
|
public ShardedJedis(List<JedisShardInfo> shards) {
|
||||||
super(shards);
|
super(shards);
|
||||||
|
|||||||
@@ -43,6 +43,31 @@ public class HyperLogLogCommandsTest extends JedisCommandTestBase {
|
|||||||
assertEquals(3, status);
|
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
|
@Test
|
||||||
public void pfcountBinary() {
|
public void pfcountBinary() {
|
||||||
byte[] bHll = SafeEncoder.encode("hll");
|
byte[] bHll = SafeEncoder.encode("hll");
|
||||||
|
|||||||
Reference in New Issue
Block a user