From 224555afd2c57ce49c62bfe8ef2bb44245f4aaa0 Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Tue, 14 Sep 2010 16:43:48 -0300 Subject: [PATCH] Added password to Jedis, JedisPool and ShardedJedis constructor for easier and more efficient usage --- src/main/java/redis/clients/jedis/Jedis.java | 10 ++++++++ .../java/redis/clients/jedis/JedisPool.java | 19 +++++++++++++++ .../redis/clients/jedis/ShardedJedis.java | 6 +---- .../clients/jedis/tests/JedisPoolTest.java | 23 ++++++++----------- .../redis/clients/jedis/tests/JedisTest.java | 9 ++++++++ .../jedis/tests/benchmark/PoolBenchmark.java | 7 +++--- 6 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 14af0ce..d22c0f8 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -10,6 +10,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import redis.clients.util.ShardInfo; + public class Jedis { private Client client = null; @@ -26,6 +28,14 @@ public class Jedis { client.setTimeout(timeout); } + public Jedis(ShardInfo shardInfo) { + client = new Client(shardInfo.getHost(), shardInfo.getPort()); + client.setTimeout(shardInfo.getTimeout()); + if (shardInfo.getPassword() != null) { + this.auth(shardInfo.getPassword()); + } + } + public String ping() { checkIsInMulti(); client.ping(); diff --git a/src/main/java/redis/clients/jedis/JedisPool.java b/src/main/java/redis/clients/jedis/JedisPool.java index 46c0fe9..3d19482 100644 --- a/src/main/java/redis/clients/jedis/JedisPool.java +++ b/src/main/java/redis/clients/jedis/JedisPool.java @@ -1,11 +1,13 @@ package redis.clients.jedis; import redis.clients.util.FixedResourcePool; +import redis.clients.util.ShardInfo; public class JedisPool extends FixedResourcePool { private String host; private int port; private int timeout; + private String password; public JedisPool(String host) { this.host = host; @@ -23,6 +25,20 @@ public class JedisPool extends FixedResourcePool { this.timeout = timeout; } + public JedisPool(String host, int port, int timeout, String password) { + this.host = host; + this.port = port; + this.timeout = timeout; + this.password = password; + } + + public JedisPool(ShardInfo shardInfo) { + this.host = shardInfo.getHost(); + this.port = shardInfo.getPort(); + this.timeout = shardInfo.getTimeout(); + this.password = shardInfo.getPassword(); + } + @Override protected Jedis createResource() { Jedis jedis = new Jedis(this.host, this.port, this.timeout); @@ -30,6 +46,9 @@ public class JedisPool extends FixedResourcePool { while (!done) { try { jedis.connect(); + if (password != null) { + jedis.auth(password); + } done = true; } catch (Exception e) { try { diff --git a/src/main/java/redis/clients/jedis/ShardedJedis.java b/src/main/java/redis/clients/jedis/ShardedJedis.java index 8663a7b..a2aceae 100644 --- a/src/main/java/redis/clients/jedis/ShardedJedis.java +++ b/src/main/java/redis/clients/jedis/ShardedJedis.java @@ -352,10 +352,6 @@ public class ShardedJedis extends Sharded { } protected Jedis create(ShardInfo shard) { - Jedis c = new Jedis(shard.getHost(), shard.getPort()); - if (shard.getPassword() != null) { - c.auth(shard.getPassword()); - } - return c; + return new Jedis(shard); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java index 4444ee6..89c15c9 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java @@ -13,12 +13,12 @@ import redis.clients.jedis.Protocol; public class JedisPoolTest extends Assert { @Test public void checkConnections() throws TimeoutException { - JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, 2000); + JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, + 2000, "foobared"); pool.setResourcesNumber(10); pool.init(); Jedis jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); pool.returnResource(jedis); @@ -27,12 +27,12 @@ public class JedisPoolTest extends Assert { @Test public void checkConnectionWithDefaultPort() throws TimeoutException { - JedisPool pool = new JedisPool("localhost"); + JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, + 2000, "foobared"); pool.setResourcesNumber(10); pool.init(); Jedis jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); pool.returnResource(jedis); @@ -41,17 +41,16 @@ public class JedisPoolTest extends Assert { @Test public void checkJedisIsReusedWhenReturned() throws TimeoutException { - JedisPool pool = new JedisPool("localhost"); + JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, + 2000, "foobared"); pool.setResourcesNumber(1); pool.init(); Jedis jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.set("foo", "0"); pool.returnResource(jedis); jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.incr("foo"); pool.returnResource(jedis); pool.destroy(); @@ -60,17 +59,16 @@ public class JedisPoolTest extends Assert { @Test public void checkPoolRepairedWhenJedisIsBroken() throws TimeoutException, IOException { - JedisPool pool = new JedisPool("localhost"); + JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, + 2000, "foobared"); pool.setResourcesNumber(1); pool.init(); Jedis jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.quit(); pool.returnBrokenResource(jedis); jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.incr("foo"); pool.returnResource(jedis); pool.destroy(); @@ -78,16 +76,15 @@ public class JedisPoolTest extends Assert { @Test(expected = TimeoutException.class) public void checkPoolOverflow() throws TimeoutException { - JedisPool pool = new JedisPool("localhost"); + JedisPool pool = new JedisPool("localhost", Protocol.DEFAULT_PORT, + 2000, "foobared"); pool.setResourcesNumber(1); pool.init(); Jedis jedis = pool.getResource(200); - jedis.auth("foobared"); jedis.set("foo", "0"); Jedis newJedis = pool.getResource(200); - newJedis.auth("foobared"); newJedis.incr("foo"); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/JedisTest.java b/src/test/java/redis/clients/jedis/tests/JedisTest.java index 1888cd2..64ff957 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisTest.java @@ -6,8 +6,10 @@ import java.util.Map; import org.junit.Test; import redis.clients.jedis.Jedis; +import redis.clients.jedis.Protocol; import redis.clients.jedis.tests.commands.JedisCommandTestBase; import redis.clients.util.RedisOutputStream; +import redis.clients.util.ShardInfo; public class JedisTest extends JedisCommandTestBase { @Test @@ -31,4 +33,11 @@ public class JedisTest extends JedisCommandTestBase { assertEquals(hash, jedis.hgetAll("foo")); } + @Test + public void connectWithShardInfo() { + ShardInfo shardInfo = new ShardInfo("localhost", Protocol.DEFAULT_PORT); + shardInfo.setPassword("foobared"); + Jedis jedis = new Jedis(shardInfo); + jedis.get("foo"); + } } diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java index 71d9482..6ebf416 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; +import redis.clients.jedis.Protocol; public class PoolBenchmark { private static final int TOTAL_OPERATIONS = 100000; @@ -25,7 +26,7 @@ public class PoolBenchmark { // withoutPool(); withPool(); long elapsed = System.currentTimeMillis() - t; - System.out.println(((1000 * 3 * TOTAL_OPERATIONS) / elapsed) + " ops"); + System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); } private static void withoutPool() throws InterruptedException { @@ -60,7 +61,8 @@ public class PoolBenchmark { } private static void withPool() throws InterruptedException { - final JedisPool pool = new JedisPool("localhost"); + final JedisPool pool = new JedisPool("localhost", + Protocol.DEFAULT_PORT, 2000, "foobared"); pool.setResourcesNumber(50); pool.setDefaultPoolWait(1000000); pool.init(); @@ -73,7 +75,6 @@ public class PoolBenchmark { for (int i = 0; (i = ind.getAndIncrement()) < TOTAL_OPERATIONS;) { try { Jedis j = pool.getResource(); - j.auth("foobared"); final String key = "foo" + i; j.set(key, key); j.get(key);