From 08338e5da6f10d0dc9ce4d1c29a20a1cbb605e01 Mon Sep 17 00:00:00 2001 From: dengliming Date: Wed, 24 Mar 2021 10:52:15 +0800 Subject: [PATCH 1/2] Add support CLIENT INFO and CLIENT LIST for specific ids --- .../redis/clients/jedis/BinaryClient.java | 21 ++++++++++++++++++- .../java/redis/clients/jedis/BinaryJedis.java | 14 +++++++++++++ src/main/java/redis/clients/jedis/Jedis.java | 14 +++++++++++++ .../commands/AdvancedBinaryJedisCommands.java | 4 ++++ .../jedis/commands/AdvancedJedisCommands.java | 4 ++++ .../clients/jedis/commands/Commands.java | 4 ++++ .../tests/commands/ClientCommandsTest.java | 20 ++++++++++++++++++ 7 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 6b16205fcf..cf583918a3 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -1313,7 +1313,26 @@ public void clientGetname() { } public void clientList() { - sendCommand(CLIENT, Keyword.LIST.getRaw()); + clientList(null); + } + + public void clientList(final long... clientIds) { + if (clientIds == null) { + sendCommand(CLIENT, Keyword.LIST.getRaw()); + } else { + final byte[][] params = new byte[2 + clientIds.length][]; + int index = 0; + params[index++] = Keyword.LIST.getRaw(); + params[index++] = ID.getRaw(); + for (final long clientId : clientIds) { + params[index++] = toByteArray(clientId); + } + sendCommand(CLIENT, params); + } + } + + public void clientInfo() { + sendCommand(CLIENT, INFO.getRaw()); } public void clientSetname(final byte[] name) { diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 2d53b4b438..18be17d6a8 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -4266,6 +4266,20 @@ public byte[] clientListBinary() { return client.getBinaryBulkReply(); } + @Override + public byte[] clientListBinary(final long... clientIds) { + checkIsInMultiOrPipeline(); + client.clientList(clientIds); + return client.getBinaryBulkReply(); + } + + @Override + public byte[] clientInfoBinary() { + checkIsInMultiOrPipeline(); + client.clientInfo(); + return client.getBinaryBulkReply(); + } + @Override public String clientSetname(final byte[] name) { checkIsInMultiOrPipeline(); diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 4516b26710..a989a9a3ec 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -3568,6 +3568,20 @@ public String clientList() { return client.getBulkReply(); } + @Override + public String clientList(final long... clientIds) { + checkIsInMultiOrPipeline(); + client.clientList(clientIds); + return client.getBulkReply(); + } + + @Override + public String clientInfo() { + checkIsInMultiOrPipeline(); + client.clientInfo(); + return client.getBulkReply(); + } + @Override public String clientSetname(final String name) { checkIsInMultiOrPipeline(); diff --git a/src/main/java/redis/clients/jedis/commands/AdvancedBinaryJedisCommands.java b/src/main/java/redis/clients/jedis/commands/AdvancedBinaryJedisCommands.java index 55a923ca22..355f6d1b5e 100644 --- a/src/main/java/redis/clients/jedis/commands/AdvancedBinaryJedisCommands.java +++ b/src/main/java/redis/clients/jedis/commands/AdvancedBinaryJedisCommands.java @@ -48,6 +48,10 @@ String migrate(String host, int port, int destinationDB, int timeout, MigratePar byte[] clientListBinary(); + byte[] clientListBinary(long... clientIds); + + byte[] clientInfoBinary(); + String clientSetname(byte[] name); Long clientId(); diff --git a/src/main/java/redis/clients/jedis/commands/AdvancedJedisCommands.java b/src/main/java/redis/clients/jedis/commands/AdvancedJedisCommands.java index a47b580d78..64d4849a00 100644 --- a/src/main/java/redis/clients/jedis/commands/AdvancedJedisCommands.java +++ b/src/main/java/redis/clients/jedis/commands/AdvancedJedisCommands.java @@ -47,6 +47,10 @@ String migrate(String host, int port, int destinationDB, int timeout, MigratePar String clientList(); + String clientList(long... clientIds); + + String clientInfo(); + String clientSetname(String name); Long clientId(); diff --git a/src/main/java/redis/clients/jedis/commands/Commands.java b/src/main/java/redis/clients/jedis/commands/Commands.java index 2fad345a99..0bee01189e 100644 --- a/src/main/java/redis/clients/jedis/commands/Commands.java +++ b/src/main/java/redis/clients/jedis/commands/Commands.java @@ -476,6 +476,10 @@ default void restoreReplace(String key, int ttl, byte[] serializedValue) { void clientList(); + void clientList(long... clientIds); + + void clientInfo(); + void clientSetname(String name); void clientId(); diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java index 26c8c6b860..9bd1da46c5 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static redis.clients.jedis.params.ClientKillParams.Type; @@ -228,6 +229,25 @@ public void killUser() { jedis.aclDelUser("test_kill"); } + @Test + public void clientInfo() { + String info = client.clientInfo(); + assertNotNull(info); + assertEquals(1, info.split("\n").length); + assertTrue(info.contains(clientName)); + } + + @Test + public void clientListWithClientId() { + String info = client.clientInfo(); + Matcher matcher = Pattern.compile("\\bid=(\\d+)\\b").matcher(info); + matcher.find(); + String id = matcher.group(1); + String listInfo = jedis.clientList(Long.valueOf(id)); + assertNotNull(listInfo); + assertTrue(info.contains(clientName)); + } + private void assertDisconnected(Jedis j) { try { j.ping(); From 6c8c1d9de8d8692638a64c5f94e012edf0514c72 Mon Sep 17 00:00:00 2001 From: dengliming Date: Wed, 24 Mar 2021 17:35:08 +0800 Subject: [PATCH 2/2] review --- .../redis/clients/jedis/BinaryClient.java | 20 ++++++++----------- .../tests/commands/ClientCommandsTest.java | 9 +++------ 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index cf583918a3..eff1640277 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -1313,22 +1313,18 @@ public void clientGetname() { } public void clientList() { - clientList(null); + sendCommand(CLIENT, Keyword.LIST.getRaw()); } public void clientList(final long... clientIds) { - if (clientIds == null) { - sendCommand(CLIENT, Keyword.LIST.getRaw()); - } else { - final byte[][] params = new byte[2 + clientIds.length][]; - int index = 0; - params[index++] = Keyword.LIST.getRaw(); - params[index++] = ID.getRaw(); - for (final long clientId : clientIds) { - params[index++] = toByteArray(clientId); - } - sendCommand(CLIENT, params); + final byte[][] params = new byte[2 + clientIds.length][]; + int index = 0; + params[index++] = Keyword.LIST.getRaw(); + params[index++] = ID.getRaw(); + for (final long clientId : clientIds) { + params[index++] = toByteArray(clientId); } + sendCommand(CLIENT, params); } public void clientInfo() { diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java index 9bd1da46c5..8a5544a1ad 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ClientCommandsTest.java @@ -239,13 +239,10 @@ public void clientInfo() { @Test public void clientListWithClientId() { - String info = client.clientInfo(); - Matcher matcher = Pattern.compile("\\bid=(\\d+)\\b").matcher(info); - matcher.find(); - String id = matcher.group(1); - String listInfo = jedis.clientList(Long.valueOf(id)); + Long id = client.clientId(); + String listInfo = jedis.clientList(id); assertNotNull(listInfo); - assertTrue(info.contains(clientName)); + assertTrue(listInfo.contains(clientName)); } private void assertDisconnected(Jedis j) {