Skip to content

Commit 5089cbd

Browse files
z0mgsazzad16
authored andcommitted
implemented zpopmax, zpopmax with count (#1968)
* implemented zpopmax, zpopmax with count * implemented zpopmax, zpopmax with count -> used Tuple * implemented zpopmax, zpopmax with count -> trimmed stuff * implemented zpopmax, zpopmax with count -> beautified code and tests * reorder/format due to changes in master
1 parent 7f6bfc7 commit 5089cbd

19 files changed

+369
-44
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,14 @@ public void zscore(final byte[] key, final byte[] member) {
503503
sendCommand(ZSCORE, key, member);
504504
}
505505

506+
public void zpopmax(final byte[] key) {
507+
sendCommand(ZPOPMAX, key);
508+
}
509+
510+
public void zpopmax(final byte[] key, final int count) {
511+
sendCommand(ZPOPMAX, key, toByteArray(count));
512+
}
513+
506514
public void zpopmin(final byte[] key) {
507515
sendCommand(ZPOPMIN, key);
508516
}

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,14 +1846,28 @@ public Double zscore(final byte[] key, final byte[] member) {
18461846
}
18471847

18481848
@Override
1849-
public Set<Tuple> zpopmin(final byte[] key) {
1849+
public Tuple zpopmax(final byte[] key) {
18501850
checkIsInMultiOrPipeline();
1851-
client.zpopmin(key);
1851+
client.zpopmax(key);
1852+
return BuilderFactory.TUPLE.build(client.getBinaryMultiBulkReply());
1853+
}
1854+
1855+
@Override
1856+
public Set<Tuple> zpopmax(final byte[] key, final int count) {
1857+
checkIsInMultiOrPipeline();
1858+
client.zpopmax(key, count);
18521859
return getTupledSet();
18531860
}
18541861

18551862
@Override
1856-
public Set<Tuple> zpopmin(final byte[] key, final long count) {
1863+
public Tuple zpopmin(final byte[] key) {
1864+
checkIsInMultiOrPipeline();
1865+
client.zpopmin(key);
1866+
return BuilderFactory.TUPLE.build(client.getBinaryMultiBulkReply());
1867+
}
1868+
1869+
@Override
1870+
public Set<Tuple> zpopmin(final byte[] key, final int count) {
18571871
checkIsInMultiOrPipeline();
18581872
client.zpopmin(key, count);
18591873
return getTupledSet();

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -908,21 +908,41 @@ public Double execute(Jedis connection) {
908908
}
909909

910910
@Override
911-
public Set<Tuple> zpopmin(final byte[] key, final long count) {
911+
public Tuple zpopmax(final byte[] key) {
912+
return new JedisClusterCommand<Tuple>(connectionHandler, maxAttempts) {
913+
@Override
914+
public Tuple execute(Jedis connection) {
915+
return connection.zpopmax(key);
916+
}
917+
}.runBinary(key);
918+
}
919+
920+
@Override
921+
public Set<Tuple> zpopmax(final byte[] key, final int count) {
912922
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
913923
@Override
914924
public Set<Tuple> execute(Jedis connection) {
915-
return connection.zpopmin(key, count);
925+
return connection.zpopmax(key, count);
926+
}
927+
}.runBinary(key);
928+
}
929+
930+
@Override
931+
public Tuple zpopmin(final byte[] key) {
932+
return new JedisClusterCommand<Tuple>(connectionHandler, maxAttempts) {
933+
@Override
934+
public Tuple execute(Jedis connection) {
935+
return connection.zpopmin(key);
916936
}
917937
}.runBinary(key);
918938
}
919939

920940
@Override
921-
public Set<Tuple> zpopmin(final byte[] key) {
941+
public Set<Tuple> zpopmin(final byte[] key, final int count) {
922942
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
923943
@Override
924944
public Set<Tuple> execute(Jedis connection) {
925-
return connection.zpopmin(key);
945+
return connection.zpopmin(key, count);
926946
}
927947
}.runBinary(key);
928948
}

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,13 +539,25 @@ public Double zscore(final byte[] key, final byte[] member) {
539539
}
540540

541541
@Override
542-
public Set<Tuple> zpopmin(final byte[] key) {
542+
public Tuple zpopmax(final byte[] key) {
543+
Jedis j = getShard(key);
544+
return j.zpopmax(key);
545+
}
546+
547+
@Override
548+
public Set<Tuple> zpopmax(final byte[] key, final int count) {
549+
Jedis j = getShard(key);
550+
return j.zpopmax(key, count);
551+
}
552+
553+
@Override
554+
public Tuple zpopmin(final byte[] key) {
543555
Jedis j = getShard(key);
544556
return j.zpopmin(key);
545557
}
546558

547559
@Override
548-
public Set<Tuple> zpopmin(final byte[] key, final long count) {
560+
public Set<Tuple> zpopmin(final byte[] key, final int count) {
549561
Jedis j = getShard(key);
550562
return j.zpopmin(key, count);
551563
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,24 @@ public String toString() {
285285

286286
};
287287

288+
public static final Builder<Tuple> TUPLE = new Builder<Tuple>() {
289+
@Override
290+
@SuppressWarnings("unchecked")
291+
public Tuple build(Object data) {
292+
List<byte[]> l = (List<byte[]>) data; // never null
293+
if (l.isEmpty()) {
294+
return null;
295+
}
296+
return new Tuple(l.get(0), DOUBLE.build(l.get(1)));
297+
}
298+
299+
@Override
300+
public String toString() {
301+
return "Tuple";
302+
}
303+
304+
};
305+
288306
public static final Builder<Object> EVAL_RESULT = new Builder<Object>() {
289307

290308
@Override

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,16 @@ public void zscore(final String key, final String member) {
465465
zscore(SafeEncoder.encode(key), SafeEncoder.encode(member));
466466
}
467467

468+
@Override
469+
public void zpopmax(final String key) {
470+
zpopmax(SafeEncoder.encode(key));
471+
}
472+
473+
@Override
474+
public void zpopmax(final String key, final int count) {
475+
zpopmax(SafeEncoder.encode(key), count);
476+
}
477+
468478
@Override
469479
public void zpopmin(final String key) {
470480
zpopmin(SafeEncoder.encode(key));

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,14 +1677,28 @@ public Double zscore(final String key, final String member) {
16771677
}
16781678

16791679
@Override
1680-
public Set<Tuple> zpopmin(final String key) {
1680+
public Tuple zpopmax(final String key) {
16811681
checkIsInMultiOrPipeline();
1682-
client.zpopmin(key);
1682+
client.zpopmax(key);
1683+
return BuilderFactory.TUPLE.build(client.getBinaryMultiBulkReply());
1684+
}
1685+
1686+
@Override
1687+
public Set<Tuple> zpopmax(final String key, final int count) {
1688+
checkIsInMultiOrPipeline();
1689+
client.zpopmax(key, count);
16831690
return getTupledSet();
16841691
}
16851692

16861693
@Override
1687-
public Set<Tuple> zpopmin(final String key, final long count) {
1694+
public Tuple zpopmin(final String key) {
1695+
checkIsInMultiOrPipeline();
1696+
client.zpopmin(key);
1697+
return BuilderFactory.TUPLE.build(client.getBinaryMultiBulkReply());
1698+
}
1699+
1700+
@Override
1701+
public Set<Tuple> zpopmin(final String key, final int count) {
16881702
checkIsInMultiOrPipeline();
16891703
client.zpopmin(key, count);
16901704
return getTupledSet();

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,46 @@ public Double execute(Jedis connection) {
945945
}.run(key);
946946
}
947947

948+
@Override
949+
public Tuple zpopmax(final String key) {
950+
return new JedisClusterCommand<Tuple>(connectionHandler, maxAttempts) {
951+
@Override
952+
public Tuple execute(Jedis connection) {
953+
return connection.zpopmax(key);
954+
}
955+
}.run(key);
956+
}
957+
958+
@Override
959+
public Set<Tuple> zpopmax(final String key, final int count) {
960+
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
961+
@Override
962+
public Set<Tuple> execute(Jedis connection) {
963+
return connection.zpopmax(key, count);
964+
}
965+
}.run(key);
966+
}
967+
968+
@Override
969+
public Tuple zpopmin(final String key) {
970+
return new JedisClusterCommand<Tuple>(connectionHandler, maxAttempts) {
971+
@Override
972+
public Tuple execute(Jedis connection) {
973+
return connection.zpopmin(key);
974+
}
975+
}.run(key);
976+
}
977+
978+
@Override
979+
public Set<Tuple> zpopmin(final String key, final int count) {
980+
return new JedisClusterCommand<Set<Tuple>>(connectionHandler, maxAttempts) {
981+
@Override
982+
public Set<Tuple> execute(Jedis connection) {
983+
return connection.zpopmin(key, count);
984+
}
985+
}.run(key);
986+
}
987+
948988
@Override
949989
public List<String> sort(final String key) {
950990
return new JedisClusterCommand<List<String>>(connectionHandler, maxAttempts) {

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

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,13 +1301,49 @@ public Response<Double> zscore(final byte[] key, final byte[] member) {
13011301
}
13021302

13031303
@Override
1304-
public Response<Set<Tuple>> zpopmin(final String key) {
1304+
public Response<Tuple> zpopmax(final String key) {
1305+
getClient(key).zpopmax(key);
1306+
return getResponse(BuilderFactory.TUPLE);
1307+
}
1308+
1309+
@Override
1310+
public Response<Tuple> zpopmax(final byte[] key) {
1311+
getClient(key).zpopmax(key);
1312+
return getResponse(BuilderFactory.TUPLE);
1313+
}
1314+
1315+
@Override
1316+
public Response<Set<Tuple>> zpopmax(final String key, final int count) {
1317+
getClient(key).zpopmax(key, count);
1318+
return getResponse(BuilderFactory.TUPLE_ZSET);
1319+
}
1320+
1321+
@Override
1322+
public Response<Set<Tuple>> zpopmax(final byte[] key, final int count) {
1323+
getClient(key).zpopmax(key, count);
1324+
return getResponse(BuilderFactory.TUPLE_ZSET);
1325+
}
1326+
1327+
@Override
1328+
public Response<Tuple> zpopmin(final String key) {
13051329
getClient(key).zpopmin(key);
1330+
return getResponse(BuilderFactory.TUPLE);
1331+
}
1332+
1333+
@Override
1334+
public Response<Tuple> zpopmin(final byte[] key) {
1335+
getClient(key).zpopmin(key);
1336+
return getResponse(BuilderFactory.TUPLE);
1337+
}
1338+
1339+
@Override
1340+
public Response<Set<Tuple>> zpopmin(final byte[] key, final int count) {
1341+
getClient(key).zpopmin(key, count);
13061342
return getResponse(BuilderFactory.TUPLE_ZSET);
13071343
}
13081344

13091345
@Override
1310-
public Response<Set<Tuple>> zpopmin(final String key, final long count) {
1346+
public Response<Set<Tuple>> zpopmin(final String key, final int count) {
13111347
getClient(key).zpopmin(key, count);
13121348
return getResponse(BuilderFactory.TUPLE_ZSET);
13131349
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -249,13 +249,13 @@ public static enum Command implements ProtocolCommand {
249249
HINCRBY, HEXISTS, HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX,
250250
LSET, LREM, LPOP, RPOP, RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER,
251251
SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY,
252-
ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, ZPOPMIN, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT,
253-
BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBSUB, ZCOUNT,
254-
ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE,
255-
ZLEXCOUNT, ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE,
256-
SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT,
257-
DEBUG, BRPOPLPUSH, SETBIT, GETBIT, BITPOS, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG,
258-
OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT,
252+
ZRANK, ZREVRANK, ZREVRANGE, ZCARD, ZSCORE, ZPOPMAX, ZPOPMIN, MULTI, DISCARD, EXEC, WATCH,
253+
UNWATCH, SORT, BLPOP, BRPOP, AUTH, SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE,
254+
PUBSUB, ZCOUNT, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE,
255+
ZINTERSTORE, ZLEXCOUNT, ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, SAVE, BGSAVE, BGREWRITEAOF,
256+
LASTSAVE, SHUTDOWN, INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO,
257+
LINSERT, DEBUG, BRPOPLPUSH, SETBIT, GETBIT, BITPOS, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT,
258+
SLOWLOG, OBJECT, BITCOUNT, BITOP, SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT,
259259
PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING,
260260
PFADD, PFCOUNT, PFMERGE, READONLY, GEOADD, GEODIST, GEOHASH, GEOPOS, GEORADIUS, GEORADIUS_RO,
261261
GEORADIUSBYMEMBER, GEORADIUSBYMEMBER_RO, MODULE, BITFIELD, HSTRLEN, TOUCH, SWAPDB, MEMORY,

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,13 +574,25 @@ public Double zscore(final String key, final String member) {
574574
}
575575

576576
@Override
577-
public Set<Tuple> zpopmin(final String key) {
577+
public Tuple zpopmax(final String key) {
578+
Jedis j = getShard(key);
579+
return j.zpopmax(key);
580+
}
581+
582+
@Override
583+
public Set<Tuple> zpopmax(final String key, final int count) {
584+
Jedis j = getShard(key);
585+
return j.zpopmax(key, count);
586+
}
587+
588+
@Override
589+
public Tuple zpopmin(final String key) {
578590
Jedis j = getShard(key);
579591
return j.zpopmin(key);
580592
}
581593

582594
@Override
583-
public Set<Tuple> zpopmin(final String key, final long count) {
595+
public Set<Tuple> zpopmin(final String key, final int count) {
584596
Jedis j = getShard(key);
585597
return j.zpopmin(key, count);
586598
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,13 @@ public interface BinaryJedisClusterCommands {
179179

180180
Double zscore(byte[] key, byte[] member);
181181

182-
Set<Tuple> zpopmin(byte[] key);
182+
Tuple zpopmax(byte[] key);
183183

184-
Set<Tuple> zpopmin(byte[] key, long count);
184+
Set<Tuple> zpopmax(byte[] key, int count);
185+
186+
Tuple zpopmin(byte[] key);
187+
188+
Set<Tuple> zpopmin(byte[] key, int count);
185189

186190
List<byte[]> sort(byte[] key);
187191

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,13 @@ public interface BinaryJedisCommands {
184184

185185
Double zscore(byte[] key, byte[] member);
186186

187-
Set<Tuple> zpopmin(byte[] key);
187+
Tuple zpopmax(byte[] key);
188188

189-
Set<Tuple> zpopmin(byte[] key, long count);
189+
Set<Tuple> zpopmax(byte[] key, int count);
190+
191+
Tuple zpopmin(byte[] key);
192+
193+
Set<Tuple> zpopmin(byte[] key, int count);
190194

191195
List<byte[]> sort(byte[] key);
192196

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,14 @@ Response<Set<Tuple>> zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] m
233233

234234
Response<Double> zscore(byte[] key, byte[] member);
235235

236+
Response<Tuple> zpopmax(byte[] key);
237+
238+
Response<Set<Tuple>> zpopmax(byte[] key, int count);
239+
240+
Response<Tuple> zpopmin(byte[] key);
241+
242+
Response<Set<Tuple>> zpopmin(byte[] key, int count);
243+
236244
Response<Long> zlexcount(byte[] key, byte[] min, byte[] max);
237245

238246
Response<Set<byte[]>> zrangeByLex(byte[] key, byte[] min, byte[] max);

0 commit comments

Comments
 (0)