Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/redis/clients/jedis/BinaryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,10 @@ public void zaddIncr(final byte[] key, final double score, final byte[] member,
sendCommand(ZADD, params.getByteParams(key, INCR.getRaw(), toByteArray(score), member));
}

public void zdiffstore(final byte[] dstkey, final byte[]... keys) {
sendCommand(ZDIFFSTORE, joinParameters(dstkey, toByteArray(keys.length), keys));
}

public void zrange(final byte[] key, final long start, final long stop) {
sendCommand(ZRANGE, key, toByteArray(start), toByteArray(stop));
}
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/redis/clients/jedis/BinaryJedis.java
Original file line number Diff line number Diff line change
Expand Up @@ -2623,6 +2623,13 @@ public Long zcount(final byte[] key, final byte[] min, final byte[] max) {
return client.getIntegerReply();
}

@Override
public Long zdiffstore(final byte[] dstkey, final byte[]... keys) {
checkIsInMultiOrPipeline();
client.zdiffstore(dstkey, keys);
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).
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/redis/clients/jedis/BinaryJedisCluster.java
Original file line number Diff line number Diff line change
Expand Up @@ -977,6 +977,17 @@ public Double execute(Jedis connection) {
}.runBinary(key);
}

@Override
public Long zdiffstore(final byte[] dstkey, final byte[]... keys) {
byte[][] wholeKeys = KeyMergeUtil.merge(dstkey, keys);
return new JedisClusterCommand<Long>(connectionHandler, maxAttempts) {
@Override
public Long execute(Jedis connection) {
return connection.zdiffstore(dstkey, keys);
}
}.runBinary(wholeKeys.length, wholeKeys);
}

@Override
public Set<byte[]> zrange(final byte[] key, final long start, final long stop) {
return new JedisClusterCommand<Set<byte[]>>(connectionHandler, maxAttempts) {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/redis/clients/jedis/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,11 @@ public void zcount(final String key, final String min, final String max) {
zcount(SafeEncoder.encode(key), SafeEncoder.encode(min), SafeEncoder.encode(max));
}

@Override
public void zdiffstore(final String dstkey, final String... keys) {
zdiffstore(SafeEncoder.encode(dstkey), SafeEncoder.encodeMany(keys));
}

@Override
public void zrangeByScore(final String key, final double min, final double max) {
zrangeByScore(SafeEncoder.encode(key), toByteArray(min), toByteArray(max));
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/redis/clients/jedis/Jedis.java
Original file line number Diff line number Diff line change
Expand Up @@ -1673,6 +1673,13 @@ public Double zaddIncr(final String key, final double score, final String member
return BuilderFactory.DOUBLE.build(client.getOne());
}

@Override
public Long zdiffstore(final String dstkey, final String... keys) {
checkIsInMultiOrPipeline();
client.zdiffstore(dstkey, keys);
return BuilderFactory.LONG.build(client.getOne());
}

@Override
public Set<String> zrange(final String key, final long start, final long stop) {
checkIsInMultiOrPipeline();
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/redis/clients/jedis/JedisCluster.java
Original file line number Diff line number Diff line change
Expand Up @@ -1079,6 +1079,17 @@ public Double execute(Jedis connection) {
}.run(key);
}

@Override
public Long zdiffstore(final String dstkey, final String... keys) {
String[] wholeKeys = KeyMergeUtil.merge(dstkey, keys);
return new JedisClusterCommand<Long>(connectionHandler, maxAttempts) {
@Override
public Long execute(Jedis connection) {
return connection.zdiffstore(dstkey, keys);
}
}.run(wholeKeys.length, wholeKeys);
}

@Override
public Set<String> zrange(final String key, final long start, final long stop) {
return new JedisClusterCommand<Set<String>>(connectionHandler, maxAttempts) {
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,18 @@ public Response<String> unwatch() {
return getResponse(BuilderFactory.STRING);
}

@Override
public Response<Long> zdiffstore(final byte[] dstkey, final byte[]... keys) {
client.zdiffstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}

@Override
public Response<Long> zdiffstore(final String dstkey, final String... keys) {
client.zdiffstore(dstkey, keys);
return getResponse(BuilderFactory.LONG);
}

@Override
public Response<Long> zinterstore(String dstkey, String... sets) {
client.zinterstore(dstkey, sets);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/redis/clients/jedis/Protocol.java
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ public static enum Command implements ProtocolCommand {
SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET,
HMGET, HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, HRANDFIELD, 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,
SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZDIFFSTORE, ZRANGE, ZREM,
ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZRANDMEMBER, ZCARD, ZSCORE, ZPOPMAX, ZPOPMIN, MULTI, DISCARD, EXEC,
WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE,
PUNSUBSCRIBE, PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK,
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/redis/clients/jedis/commands/Commands.java
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ default void setex(String key, int seconds, String value) {

void zaddIncr(String key, double score, String member, ZAddParams params);

void zdiffstore(String dstkey, String... keys);

void zrange(String key, long start, long stop);

void zrem(String key, String... members);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ public interface MultiKeyBinaryCommands {

String unwatch();

Long zdiffstore(byte[] dstkey, byte[]... keys);

Long zinterstore(byte[] dstkey, byte[]... sets);

Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ public interface MultiKeyBinaryJedisClusterCommands {

Long sunionstore(byte[] dstkey, byte[]... keys);

Long zdiffstore(byte[] dstkey, byte[]... keys);

Long zinterstore(byte[] dstkey, byte[]... sets);

Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ public interface MultiKeyBinaryRedisPipeline {

Response<String> unwatch();

Response<Long> zdiffstore(byte[] dstkey, byte[]... keys);

Response<Long> zinterstore(byte[] dstkey, byte[]... sets);

Response<Long> zinterstore(byte[] dstkey, ZParams params, byte[]... sets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ public interface MultiKeyCommands {

String unwatch();

Long zdiffstore(String dstkey, String... keys);

Long zinterstore(String dstkey, String... sets);

Long zinterstore(String dstkey, ZParams params, String... sets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public interface MultiKeyCommandsPipeline {

Response<String> unwatch();

Response<Long> zdiffstore(String dstkey, String... keys);

Response<Long> zinterstore(String dstkey, String... sets);

Response<Long> zinterstore(String dstkey, ZParams params, String... sets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ public interface MultiKeyJedisClusterCommands {

Long sunionstore(String dstkey, String... keys);

Long zdiffstore(String dstkey, String... keys);

Long zinterstore(String dstkey, String... sets);

Long zinterstore(String dstkey, ZParams params, String... sets);
Expand Down Expand Up @@ -115,7 +117,7 @@ List<Map.Entry<String, List<StreamEntry>>> xread(int count, long block,

List<Map.Entry<String, List<StreamEntry>>> xread(XReadParams xReadParams,
Map<String, StreamEntryID> streams);

/**
* XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static redis.clients.jedis.tests.utils.AssertUtil.assertCollectionContains;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
Expand Down Expand Up @@ -1445,6 +1446,28 @@ public void bzpopmin() {
assertEquals(new KeyedTuple(bbar, bc, 0.1d), actual);
}

@Test
public void zdiffstore() {
jedis.zadd("foo", 1.0, "a");
jedis.zadd("foo", 2.0, "b");
jedis.zadd("bar", 1.0, "a");

assertEquals(0, jedis.zdiffstore("bar3", "bar1", "bar2").longValue());
assertEquals(1, jedis.zdiffstore("bar3", "foo", "bar").longValue());
assertEquals(Collections.singleton("b"), jedis.zrange("bar3", 0, -1));

// binary

jedis.zadd(bfoo, 1.0, ba);
jedis.zadd(bfoo, 2.0, bb);
jedis.zadd(bbar, 1.0, ba);

assertEquals(0, jedis.zdiffstore(bbar3, bbar1, bbar2).longValue());
assertEquals(1, jedis.zdiffstore(bbar3, bfoo, bbar).longValue());
Set<byte[]> bactual = jedis.zrange(bbar3, 0, -1);
assertArrayEquals(bb, bactual.iterator().next());
}

@Test
public void zrandmember() {
assertNull(jedis.zrandmember("foo"));
Expand Down