Skip to content

Commit

Permalink
Test Jedis with pooled connections
Browse files Browse the repository at this point in the history
Signed-off-by: Andrew Carbonetto <[email protected]>
  • Loading branch information
acarbonetto committed Nov 24, 2023
1 parent b50d57e commit 596fa98
Show file tree
Hide file tree
Showing 11 changed files with 140 additions and 210 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@
import java.util.stream.Stream;
import javababushka.benchmarks.clients.babushka.JniNettyClient;
import javababushka.benchmarks.clients.jedis.JedisClient;
import javababushka.benchmarks.clients.jedis.JedisPseudoAsyncClient;
import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient;
import javababushka.benchmarks.clients.lettuce.LettuceAsyncClusterClient;
import javababushka.benchmarks.clients.lettuce.LettuceClient;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
Expand Down Expand Up @@ -52,25 +50,15 @@ public static void main(String[] args) {
// run testClientSetGet on JEDIS sync client
testClientSetGet(JedisClient::new, runConfiguration, false);
break;
case JEDIS_ASYNC:
// run testClientSetGet on JEDIS pseudo-async client
testClientSetGet(JedisPseudoAsyncClient::new, runConfiguration, true);
break;
case LETTUCE:
testClientSetGet(LettuceClient::new, runConfiguration, false);
break;
case LETTUCE_ASYNC:
if (runConfiguration.clusterModeEnabled) {
testClientSetGet(LettuceAsyncClusterClient::new, runConfiguration, true);
} else {
testClientSetGet(LettuceAsyncClient::new, runConfiguration, true);
}
break;
case BABUSHKA:
testClientSetGet(() -> new JniNettyClient(false), runConfiguration, false);
break;
case BABUSHKA_ASYNC:
testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true);
testClientSetGet(() -> new JniNettyClient(false), runConfiguration, true);
break;
}
}
Expand Down Expand Up @@ -154,18 +142,12 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce
case ALL:
return Stream.of(
ClientName.JEDIS,
ClientName.JEDIS_ASYNC,
ClientName.BABUSHKA,
ClientName.BABUSHKA_ASYNC,
ClientName.LETTUCE,
ClientName.LETTUCE_ASYNC);
ClientName.LETTUCE);
case ALL_ASYNC:
return Stream.of(
ClientName.JEDIS_ASYNC,
ClientName.BABUSHKA_ASYNC,
ClientName.LETTUCE_ASYNC);
case ALL_SYNC:
return Stream.of(ClientName.JEDIS, ClientName.LETTUCE, ClientName.BABUSHKA);
ClientName.BABUSHKA,
ClientName.LETTUCE);
default:
return Stream.of(e);
}
Expand Down Expand Up @@ -213,13 +195,9 @@ private static int[] parseIntListOption(String line) throws ParseException {

public enum ClientName {
JEDIS("Jedis"),
JEDIS_ASYNC("Jedis async"),
LETTUCE("Lettuce"),
LETTUCE_ASYNC("Lettuce async"),
BABUSHKA_ASYNC("Babushka async"),
BABUSHKA("Babushka"),
ALL("All"),
ALL_SYNC("All sync"),
ALL_ASYNC("All async");

private String name;
Expand Down Expand Up @@ -255,16 +233,16 @@ public RunConfiguration() {
configuration = "Release";
resultsFile = Optional.empty();
dataSize = new int[] {100, 4000};
concurrentTasks = new int[] {100, 1000};
concurrentTasks = new int[] {1, 10, 100, 1000};
clients =
new ClientName[] {
// ClientName.LETTUCE,
// ClientName.LETTUCE_ASYNC,
ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA,
ClientName.JEDIS,
ClientName.LETTUCE,
ClientName.BABUSHKA,
};
host = "localhost";
port = 6379;
clientCount = new int[] {1, 2};
clientCount = new int[] {1};
tls = false;
clusterModeEnabled = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

/** A Redis client interface */
public interface Client {
static ConnectionSettings DEFAULT_CONNECTION_STRING =
new ConnectionSettings("localhost", 6379, false, false);

void connectToRedis();

void connectToRedis(ConnectionSettings connectionSettings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,55 +8,61 @@
/** A Jedis client with sync capabilities. See: https://github.com/redis/jedis */
public class JedisClient implements SyncClient {

public static final String DEFAULT_HOST = "localhost";
public static final int DEFAULT_PORT = 6379;

protected Jedis jedisResource;

@Override
public void connectToRedis() {
JedisPool pool = new JedisPool(DEFAULT_HOST, DEFAULT_PORT);
jedisResource = pool.getResource();
}
// protected Jedis jedisResource;
protected JedisPool pool;

// protected JedisPooled pooledConnection;
@Override
public void closeConnection() {
try {
jedisResource.close();
} catch (Exception ignored) {
}
// nothing to do
}

@Override
public String getName() {
return "Jedis";
}

@Override
public void connectToRedis() {
connectToRedis(DEFAULT_CONNECTION_STRING);
}

@Override
public void connectToRedis(ConnectionSettings connectionSettings) {
jedisResource =
new Jedis(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl);
jedisResource.connect();
if (!jedisResource.isConnected()) {
throw new RuntimeException("failed to connect to jedis");
assert connectionSettings.clusterMode == false
: "JedisClient does not support clusterMode: use JedisClusterClient instead";
pool =
new JedisPool(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl);

// check if the pool is properly connected
try (Jedis jedis = pool.getResource()) {
assert jedis.isConnected() : "failed to connect to jedis";
}
}

public String info() {
return jedisResource.info();
try (Jedis jedis = pool.getResource()) {
return jedis.info();
}
}

public String info(String section) {
return jedisResource.info(section);
try (Jedis jedis = pool.getResource()) {
return jedis.info(section);
}
}

@Override
public void set(String key, String value) {
jedisResource.set(key, value);
try (Jedis jedis = pool.getResource()) {
jedis.set(key, value);
}
}

@Override
public String get(String key) {
return jedisResource.get(key);
try (Jedis jedis = pool.getResource()) {
return jedis.get(key);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package javababushka.benchmarks.clients.jedis;

import javababushka.benchmarks.clients.SyncClient;
import javababushka.benchmarks.utils.ConnectionSettings;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/** A Jedis client with sync capabilities. See: https://github.com/redis/jedis */
public class JedisClusterClient implements SyncClient {

// protected Jedis jedisResource;
protected JedisPool pool;

@Override
public void closeConnection() {
// nothing to do
}

@Override
public String getName() {
return "Jedis";
}

@Override
public void connectToRedis() {
connectToRedis();
}

@Override
public void connectToRedis(ConnectionSettings connectionSettings) {
assert connectionSettings.clusterMode
: "JedisClusterClient does not support disabled clusterMode: use JedisClient instead";

// TODO: use JedisCluster instead
pool =
new JedisPool(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl);

// check if the pool is properly connected
try (Jedis jedis = pool.getResource()) {
assert jedis.isConnected() : "failed to connect to jedis";
}
}

public String info() {
try (Jedis jedis = pool.getResource()) {
return jedis.info();
}
}

public String info(String section) {
try (Jedis jedis = pool.getResource()) {
return jedis.info(section);
}
}

@Override
public void set(String key, String value) {
try (Jedis jedis = pool.getResource()) {
jedis.set(key, value);
}
}

@Override
public String get(String key) {
try (Jedis jedis = pool.getResource()) {
return jedis.get(key);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@

/** A Lettuce client with async capabilities see: https://lettuce.io/ */
public class LettuceAsyncClient implements AsyncClient<String> {

private RedisClient client;
private RedisAsyncCommands asyncCommands;
private StatefulRedisConnection<String, String> connection;

@Override
public void connectToRedis() {
connectToRedis(new ConnectionSettings("localhost", 6379, false, false));
connectToRedis(DEFAULT_CONNECTION_STRING);
}

@Override
Expand Down

This file was deleted.

Loading

0 comments on commit 596fa98

Please sign in to comment.