diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index 7ec33d6..3b2930f 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -22,11 +22,9 @@ public class Protocol { public static final byte COLON_BYTE = COLON.getBytes()[0]; public void sendCommand(OutputStream os, String name, String... args) { - StringBuilder builder = new StringBuilder(); - builder.append(ASTERISK).append(args.length + 1).append( - COMMAND_DELIMITER); - builder.append(DOLLAR).append(name.length()).append(COMMAND_DELIMITER); - builder.append(name).append(COMMAND_DELIMITER); + StringBuilder builder = new StringBuilder(ASTERISK + (args.length + 1) + + COMMAND_DELIMITER + DOLLAR + name.length() + + COMMAND_DELIMITER + name + COMMAND_DELIMITER); for (String arg : args) { builder.append(DOLLAR).append(arg.length()).append( COMMAND_DELIMITER).append(arg).append(COMMAND_DELIMITER); @@ -45,17 +43,21 @@ public class Protocol { private String readLine(InputStream is) { byte b; + byte c; StringBuilder sb = new StringBuilder(); try { while ((b = (byte) is.read()) != -1) { if (b == '\r') { - b = (byte) is.read(); - if (b == '\n') { + c = (byte) is.read(); + if (c == '\n') { break; } + sb.append((char) b); + sb.append((char) c); + } else { + sb.append((char) b); } - sb.append((char) b); } } catch (IOException e) { // TODO Dont know what to do here! @@ -106,7 +108,6 @@ public class Protocol { } private Object processBulkReply(InputStream is) throws IOException { - String ret = null; int len = Integer.parseInt(readLine(is)); if (len == -1) { return null; @@ -117,8 +118,7 @@ public class Protocol { is.read(); is.read(); - ret = new String(read); - return ret; + return new String(read); } private Object processInteger(InputStream is) { diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java new file mode 100644 index 0000000..be1d728 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java @@ -0,0 +1,33 @@ +package redis.clients.jedis.tests.benchmark; + +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.Calendar; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisException; + +public class GetSetBenchmark { + private static final int TOTAL_OPERATIONS = 100000; + + public static void main(String[] args) throws UnknownHostException, + IOException, JedisException { + Jedis jedis = new Jedis("localhost"); + jedis.connect(); + jedis.auth("foobared"); + + long begin = Calendar.getInstance().getTimeInMillis(); + + for (int n = 0; n <= TOTAL_OPERATIONS; n++) { + String key = "foo" + n; + jedis.set(key, "bar" + n); + jedis.get(key); + } + + long elapsed = Calendar.getInstance().getTimeInMillis() - begin; + + jedis.disconnect(); + + System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); + } +}