Skip to content

Commit c644900

Browse files
denglimingsazzad16
andauthored
Add support for ZDIFF command (#2459)
* Add support for ZDIFF command * Fix review Co-authored-by: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com>
1 parent 78998a6 commit c644900

16 files changed

+174
-2
lines changed

src/main/java/redis/clients/jedis/BinaryClient.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,18 @@ public void zadd(final byte[] key, final Map<byte[], Double> scoreMembers, final
574574
sendCommand(ZADD, params.getByteParams(key, argsArray));
575575
}
576576

577+
public void zdiff(final byte[]... keys) {
578+
sendCommand(ZDIFF, joinParameters(toByteArray(keys.length), keys));
579+
}
580+
581+
public void zdiffWithScores(final byte[]... keys) {
582+
final List<byte[]> args = new ArrayList<>(keys.length + 2);
583+
args.add(toByteArray(keys.length));
584+
Collections.addAll(args, keys);
585+
args.add(WITHSCORES.getRaw());
586+
sendCommand(ZDIFF, args.toArray(new byte[args.size()][]));
587+
}
588+
577589
public void zaddIncr(final byte[] key, final double score, final byte[] member, final ZAddParams params) {
578590
sendCommand(ZADD, params.getByteParams(key, INCR.getRaw(), toByteArray(score), member));
579591
}

src/main/java/redis/clients/jedis/BinaryJedis.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,6 +2615,20 @@ public Long zcount(final byte[] key, final byte[] min, final byte[] max) {
26152615
return client.getIntegerReply();
26162616
}
26172617

2618+
@Override
2619+
public Set<byte[]> zdiff(final byte[]... keys) {
2620+
checkIsInMultiOrPipeline();
2621+
client.zdiff(keys);
2622+
return BuilderFactory.BYTE_ARRAY_ZSET.build(client.getBinaryMultiBulkReply());
2623+
}
2624+
2625+
@Override
2626+
public Set<Tuple> zdiffWithScores(final byte[]... keys) {
2627+
checkIsInMultiOrPipeline();
2628+
client.zdiffWithScores(keys);
2629+
return getTupledSet();
2630+
}
2631+
26182632
/**
26192633
* Return the all the elements in the sorted set at key with a score between min and max
26202634
* (including elements with score equal to min or max).

src/main/java/redis/clients/jedis/BinaryJedisCluster.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,26 @@ public Double execute(Jedis connection) {
977977
}.runBinary(key);
978978
}
979979

980+
@Override
981+
public Set<byte[]> zdiff(final byte[]... keys) {
982+
return new JedisClusterCommand<Set<byte[]>>(connectionHandler, maxAttempts) {
983+
@Override
984+
public Set<byte[]> execute(Jedis connection) {
985+
return connection.zdiff(keys);
986+
}
987+
}.runBinary(keys.length, keys);
988+
}
989+
990+
@Override
991+
public Set<Tuple> zdiffWithScores(final byte[]... keys) {
992+
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
993+
@Override
994+
public Set<Tuple> execute(Jedis connection) {
995+
return connection.zdiffWithScores(keys);
996+
}
997+
}.runBinary(keys.length, keys);
998+
}
999+
9801000
@Override
9811001
public Set<byte[]> zrange(final byte[] key, final long start, final long stop) {
9821002
return new JedisClusterCommand<Set<byte[]>>(connectionHandler, maxAttempts) {

src/main/java/redis/clients/jedis/Client.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,16 @@ public void zaddIncr(final String key, final double score, final String member,
489489
zaddIncr(SafeEncoder.encode(key), score, SafeEncoder.encode(member), params);
490490
}
491491

492+
@Override
493+
public void zdiff(final String... keys) {
494+
zdiff(SafeEncoder.encodeMany(keys));
495+
}
496+
497+
@Override
498+
public void zdiffWithScores(final String... keys) {
499+
zdiffWithScores(SafeEncoder.encodeMany(keys));
500+
}
501+
492502
@Override
493503
public void zrange(final String key, final long start, final long stop) {
494504
zrange(SafeEncoder.encode(key), start, stop);

src/main/java/redis/clients/jedis/Jedis.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,6 +1673,20 @@ public Double zaddIncr(final String key, final double score, final String member
16731673
return BuilderFactory.DOUBLE.build(client.getOne());
16741674
}
16751675

1676+
@Override
1677+
public Set<String> zdiff(String... keys) {
1678+
checkIsInMultiOrPipeline();
1679+
client.zdiff(keys);
1680+
return SetFromList.of(client.getMultiBulkReply());
1681+
}
1682+
1683+
@Override
1684+
public Set<Tuple> zdiffWithScores(String... keys) {
1685+
checkIsInMultiOrPipeline();
1686+
client.zdiffWithScores(keys);
1687+
return getTupledSet();
1688+
}
1689+
16761690
@Override
16771691
public Set<String> zrange(final String key, final long start, final long stop) {
16781692
checkIsInMultiOrPipeline();

src/main/java/redis/clients/jedis/JedisCluster.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,6 +1079,26 @@ public Double execute(Jedis connection) {
10791079
}.run(key);
10801080
}
10811081

1082+
@Override
1083+
public Set<String> zdiff(String... keys) {
1084+
return new JedisClusterCommand<Set<String>>(connectionHandler, maxAttempts) {
1085+
@Override
1086+
public Set<String> execute(Jedis connection) {
1087+
return connection.zdiff(keys);
1088+
}
1089+
}.run(keys.length, keys);
1090+
}
1091+
1092+
@Override
1093+
public Set<Tuple> zdiffWithScores(String... keys) {
1094+
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
1095+
@Override
1096+
public Set<Tuple> execute(Jedis connection) {
1097+
return connection.zdiffWithScores(keys);
1098+
}
1099+
}.run(keys.length, keys);
1100+
}
1101+
10821102
@Override
10831103
public Set<String> zrange(final String key, final long start, final long stop) {
10841104
return new JedisClusterCommand<Set<String>>(connectionHandler, maxAttempts) {

src/main/java/redis/clients/jedis/MultiKeyPipelineBase.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,30 @@ public Response<String> unwatch() {
337337
return getResponse(BuilderFactory.STRING);
338338
}
339339

340+
@Override
341+
public Response<Set<byte[]>> zdiff(byte[]... keys) {
342+
client.zdiff(keys);
343+
return getResponse(BuilderFactory.BYTE_ARRAY_ZSET);
344+
}
345+
346+
@Override
347+
public Response<Set<Tuple>> zdiffWithScores(byte[]... keys) {
348+
client.zdiffWithScores(keys);
349+
return getResponse(BuilderFactory.TUPLE_ZSET);
350+
}
351+
352+
@Override
353+
public Response<Set<String>> zdiff(String... keys) {
354+
client.zdiff(keys);
355+
return getResponse(BuilderFactory.STRING_ZSET);
356+
}
357+
358+
@Override
359+
public Response<Set<Tuple>> zdiffWithScores(String... keys) {
360+
client.zdiffWithScores(keys);
361+
return getResponse(BuilderFactory.TUPLE_ZSET);
362+
}
363+
340364
@Override
341365
public Response<Long> zinterstore(String dstkey, String... sets) {
342366
client.zinterstore(dstkey, sets);

src/main/java/redis/clients/jedis/Protocol.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ public static enum Command implements ProtocolCommand {
249249
SETEX, MSET, MSETNX, DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET,
250250
HMGET, HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, HRANDFIELD, RPUSH, LPUSH, LLEN, LRANGE, LTRIM,
251251
LINDEX, LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER,
252-
SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM,
252+
SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZDIFF, ZRANGE, ZREM,
253253
ZINCRBY, ZRANK, ZREVRANK, ZREVRANGE, ZRANDMEMBER, ZCARD, ZSCORE, ZPOPMAX, ZPOPMIN, MULTI, DISCARD, EXEC,
254254
WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE,
255255
PUNSUBSCRIBE, PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK,

src/main/java/redis/clients/jedis/commands/Commands.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ default void setex(String key, int seconds, String value) {
209209

210210
void sdiffstore(String dstkey, String... keys);
211211

212+
void zdiff(String... keys);
213+
214+
void zdiffWithScores(String... keys);
215+
212216
void srandmember(String key);
213217

214218
void zadd(String key, double score, String member);

src/main/java/redis/clients/jedis/commands/MultiKeyBinaryCommands.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import redis.clients.jedis.GeoUnit;
66
import redis.clients.jedis.KeyedTuple;
77
import redis.clients.jedis.SortingParams;
8+
import redis.clients.jedis.Tuple;
89
import redis.clients.jedis.ZParams;
910
import redis.clients.jedis.params.GeoRadiusParam;
1011
import redis.clients.jedis.params.GeoRadiusStoreParam;
@@ -71,6 +72,10 @@ public interface MultiKeyBinaryCommands {
7172

7273
String unwatch();
7374

75+
Set<byte[]> zdiff(byte[]... keys);
76+
77+
Set<Tuple> zdiffWithScores(byte[]... keys);
78+
7479
Long zinterstore(byte[] dstkey, byte[]... sets);
7580

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

0 commit comments

Comments
 (0)