From 2267c3318ce6a157e98d43b7c53011868420c09b Mon Sep 17 00:00:00 2001 From: Jungtaek Lim Date: Mon, 20 Jan 2014 11:36:24 +0900 Subject: [PATCH] Implemented Client.getMany(int count) to remove multiple flush while getting responses at once --- .../java/redis/clients/jedis/Connection.java | 13 ++++++++++ .../java/redis/clients/jedis/Pipeline.java | 26 ++++++------------- .../java/redis/clients/jedis/Transaction.java | 19 +++----------- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index 7c55f9a..bb12079 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -211,4 +211,17 @@ public class Connection { flush(); return Protocol.read(inputStream); } + + public List getMany(int count) { + flush(); + List responses = new ArrayList(); + for (int i = 0 ; i < count ; i++) { + try { + responses.add(Protocol.read(inputStream)); + } catch (JedisDataException e) { + responses.add(e); + } + } + return responses; + } } diff --git a/src/main/java/redis/clients/jedis/Pipeline.java b/src/main/java/redis/clients/jedis/Pipeline.java index 786ef8c..7df2a63 100755 --- a/src/main/java/redis/clients/jedis/Pipeline.java +++ b/src/main/java/redis/clients/jedis/Pipeline.java @@ -63,23 +63,16 @@ public class Pipeline extends MultiKeyPipelineBase { return client; } - public Object getOneWithJedisDataException() { - try { - return client.getOne(); - } catch (JedisDataException e) { - return e; - } - } - /** * Syncronize pipeline by reading all responses. This operation close the * pipeline. In order to get return values from pipelined commands, capture * the different Response of the commands you execute. */ public void sync() { - while (hasPipelinedResponse()) { - generateResponse(getOneWithJedisDataException()); - } + List unformatted = client.getMany(getPipelinedResponseLength()); + + for (Object resp : unformatted) + generateResponse(resp); } /** @@ -91,15 +84,12 @@ public class Pipeline extends MultiKeyPipelineBase { * @return A list of all the responses in the order you executed them. */ public List syncAndReturnAll() { + List unformatted = client.getMany(getPipelinedResponseLength()); List formatted = new ArrayList(); - while (hasPipelinedResponse()) { - try { - formatted.add(generateResponse(getOneWithJedisDataException()).get()); - } catch (JedisDataException e) { - formatted.add(e); - } - } + for (Object resp : unformatted) + formatted.add(generateResponse(resp).get()); + return formatted; } diff --git a/src/main/java/redis/clients/jedis/Transaction.java b/src/main/java/redis/clients/jedis/Transaction.java index 11bb14a..d8cf9de 100644 --- a/src/main/java/redis/clients/jedis/Transaction.java +++ b/src/main/java/redis/clients/jedis/Transaction.java @@ -30,22 +30,9 @@ public class Transaction extends MultiKeyPipelineBase { return client; } - public Object getOneWithJedisDataException() { - try { - return client.getOne(); - } catch (JedisDataException e) { - return e; - } - } - - private void consumeResponse(int count) { - for (int i = 0 ; i < count ; i++) - getOneWithJedisDataException(); - } - public List exec() { // Discard QUEUED or ERROR - consumeResponse(getPipelinedResponseLength()); + client.getMany(getPipelinedResponseLength()); client.exec(); @@ -66,7 +53,7 @@ public class Transaction extends MultiKeyPipelineBase { public List> execGetResponse() { // Discard QUEUED or ERROR - consumeResponse(getPipelinedResponseLength()); + client.getMany(getPipelinedResponseLength()); client.exec(); @@ -82,7 +69,7 @@ public class Transaction extends MultiKeyPipelineBase { } public String discard() { - consumeResponse(getPipelinedResponseLength()); + client.getMany(getPipelinedResponseLength()); client.discard(); inTransaction = false; clean();