Skip to content
Snippets Groups Projects
Commit c4807a93 authored by Jens Ehlers's avatar Jens Ehlers Committed by Sean Busbey
Browse files

[redis] Redis cluster support (#1072)

parent 7273f152
No related branches found
No related tags found
No related merge requests found
...@@ -101,7 +101,7 @@ LICENSE file. ...@@ -101,7 +101,7 @@ LICENSE file.
<openjpa.jdbc.version>2.1.1</openjpa.jdbc.version> <openjpa.jdbc.version>2.1.1</openjpa.jdbc.version>
<orientdb.version>2.2.10</orientdb.version> <orientdb.version>2.2.10</orientdb.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<redis.version>2.0.0</redis.version> <redis.version>2.9.0</redis.version>
<riak.version>2.0.5</riak.version> <riak.version>2.0.5</riak.version>
<s3.version>1.10.20</s3.version> <s3.version>1.10.20</s3.version>
<solr.version>5.5.3</solr.version> <solr.version>5.5.3</solr.version>
......
...@@ -33,12 +33,15 @@ Git clone YCSB and compile: ...@@ -33,12 +33,15 @@ Git clone YCSB and compile:
### 4. Provide Redis Connection Parameters ### 4. Provide Redis Connection Parameters
Set the host, port, and password (do not redis auth is not turned on) in the Set host, port, password, and cluster mode in the workload you plan to run.
workload you plan to run.
- `redis.host` - `redis.host`
- `redis.port` - `redis.port`
- `redis.password` - `redis.password`
* Don't set the password if redis auth is disabled.
- `redis.cluster`
* Set the cluster parameter to `true` if redis cluster mode is enabled.
* Default is `false`.
Or, you can set configs with the shell command, EG: Or, you can set configs with the shell command, EG:
......
...@@ -29,12 +29,18 @@ import com.yahoo.ycsb.DB; ...@@ -29,12 +29,18 @@ import com.yahoo.ycsb.DB;
import com.yahoo.ycsb.DBException; import com.yahoo.ycsb.DBException;
import com.yahoo.ycsb.Status; import com.yahoo.ycsb.Status;
import com.yahoo.ycsb.StringByteIterator; import com.yahoo.ycsb.StringByteIterator;
import redis.clients.jedis.BasicCommands;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisCommands;
import redis.clients.jedis.Protocol; import redis.clients.jedis.Protocol;
import java.io.Closeable;
import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
...@@ -48,11 +54,12 @@ import java.util.Vector; ...@@ -48,11 +54,12 @@ import java.util.Vector;
*/ */
public class RedisClient extends DB { public class RedisClient extends DB {
private Jedis jedis; private JedisCommands jedis;
public static final String HOST_PROPERTY = "redis.host"; public static final String HOST_PROPERTY = "redis.host";
public static final String PORT_PROPERTY = "redis.port"; public static final String PORT_PROPERTY = "redis.port";
public static final String PASSWORD_PROPERTY = "redis.password"; public static final String PASSWORD_PROPERTY = "redis.password";
public static final String CLUSTER_PROPERTY = "redis.cluster";
public static final String INDEX_KEY = "_indices"; public static final String INDEX_KEY = "_indices";
...@@ -68,17 +75,28 @@ public class RedisClient extends DB { ...@@ -68,17 +75,28 @@ public class RedisClient extends DB {
} }
String host = props.getProperty(HOST_PROPERTY); String host = props.getProperty(HOST_PROPERTY);
jedis = new Jedis(host, port); boolean clusterEnabled = Boolean.parseBoolean(props.getProperty(CLUSTER_PROPERTY));
jedis.connect(); if (clusterEnabled) {
Set<HostAndPort> jedisClusterNodes = new HashSet<>();
jedisClusterNodes.add(new HostAndPort(host, port));
jedis = new JedisCluster(jedisClusterNodes);
} else {
jedis = new Jedis(host, port);
((Jedis) jedis).connect();
}
String password = props.getProperty(PASSWORD_PROPERTY); String password = props.getProperty(PASSWORD_PROPERTY);
if (password != null) { if (password != null) {
jedis.auth(password); ((BasicCommands) jedis).auth(password);
} }
} }
public void cleanup() throws DBException { public void cleanup() throws DBException {
jedis.disconnect(); try {
((Closeable) jedis).close();
} catch (IOException e) {
throw new DBException("Closing connection failed.");
}
} }
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment