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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -1504,4 +1504,15 @@ public class JedisCluster implements JedisCommands, BasicCommands {
|
|||||||
}.run(key);
|
}.run(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long pfcount(final String... keys) {
|
||||||
|
return new JedisClusterCommand<Long>(connectionHandler,
|
||||||
|
timeout, maxRedirections) {
|
||||||
|
@Override
|
||||||
|
public Long execute(Jedis connection) {
|
||||||
|
return connection.pfcount(keys);
|
||||||
|
}
|
||||||
|
}.run(keys[0]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,4 +244,6 @@ 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);
|
||||||
|
|
||||||
|
long pfcount(final String...keys);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -582,4 +582,11 @@ public class ShardedJedis extends BinaryShardedJedis implements JedisCommands {
|
|||||||
Jedis j = getShard(key);
|
Jedis j = getShard(key);
|
||||||
return j.pfcount(key);
|
return j.pfcount(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long pfcount(String... keys) {
|
||||||
|
//The command will be sent to the first shard.
|
||||||
|
Jedis j = getShard(keys[0]);
|
||||||
|
return j.pfcount(keys);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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