Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
redis.clients.jedis.Pipeline Maven / Gradle / Ivy
package redis.clients.jedis;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import redis.clients.jedis.commands.DatabasePipelineCommands;
import redis.clients.jedis.exceptions.JedisDataException;
import redis.clients.jedis.graph.GraphCommandObjects;
import redis.clients.jedis.params.*;
import redis.clients.jedis.util.IOUtils;
import redis.clients.jedis.util.KeyValue;
public class Pipeline extends PipelineBase implements DatabasePipelineCommands, Closeable {
private final Queue> pipelinedResponses = new LinkedList<>();
protected final Connection connection;
private final boolean closeConnection;
//private final CommandObjects commandObjects;
public Pipeline(Jedis jedis) {
this(jedis.getConnection(), false);
}
public Pipeline(Connection connection) {
this(connection, false);
}
public Pipeline(Connection connection, boolean closeConnection) {
this(connection, closeConnection, createCommandObjects(connection));
}
private static CommandObjects createCommandObjects(Connection connection) {
CommandObjects commandObjects = new CommandObjects();
RedisProtocol proto = connection.getRedisProtocol();
if (proto != null) commandObjects.setProtocol(proto);
return commandObjects;
}
Pipeline(Connection connection, boolean closeConnection, CommandObjects commandObjects) {
super(commandObjects);
this.connection = connection;
this.closeConnection = closeConnection;
GraphCommandObjects graphCommandObjects = new GraphCommandObjects(this.connection);
graphCommandObjects.setBaseCommandArgumentsCreator(protocolCommand -> commandObjects.commandArguments(protocolCommand));
setGraphCommands(graphCommandObjects);
}
@Override
public final Response appendCommand(CommandObject commandObject) {
connection.sendCommand(commandObject.getArguments());
Response response = new Response<>(commandObject.getBuilder());
pipelinedResponses.add(response);
return response;
}
@Override
public void close() {
try {
sync();
} finally {
if (closeConnection) {
IOUtils.closeQuietly(connection);
}
}
}
/**
* Synchronize 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.
*/
@Override
public void sync() {
if (!hasPipelinedResponse()) return;
List unformatted = connection.getMany(pipelinedResponses.size());
for (Object rawReply : unformatted) {
pipelinedResponses.poll().set(rawReply);
}
}
/**
* Synchronize pipeline by reading all responses. This operation close the pipeline. Whenever
* possible try to avoid using this version and use Pipeline.sync() as it won't go through all the
* responses and generate the right response type (usually it is a waste of time).
* @return A list of all the responses in the order you executed them.
*/
public List syncAndReturnAll() {
if (hasPipelinedResponse()) {
List unformatted = connection.getMany(pipelinedResponses.size());
List formatted = new ArrayList<>();
for (Object rawReply : unformatted) {
try {
Response> response = pipelinedResponses.poll();
response.set(rawReply);
formatted.add(response.get());
} catch (JedisDataException e) {
formatted.add(e);
}
}
return formatted;
} else {
return java.util.Collections. emptyList();
}
}
public final boolean hasPipelinedResponse() {
return pipelinedResponses.size() > 0;
}
public Response waitReplicas(int replicas, long timeout) {
return appendCommand(commandObjects.waitReplicas(replicas, timeout));
}
public Response> waitAOF(long numLocal, long numReplicas, long timeout) {
return appendCommand(commandObjects.waitAOF(numLocal, numReplicas, timeout));
}
public Response> time() {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.TIME), BuilderFactory.STRING_LIST));
}
@Override
public Response select(final int index) {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.SELECT).add(index), BuilderFactory.STRING));
}
@Override
public Response dbSize() {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.DBSIZE), BuilderFactory.LONG));
}
@Override
public Response swapDB(final int index1, final int index2) {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.SWAPDB)
.add(index1).add(index2), BuilderFactory.STRING));
}
@Override
public Response move(String key, int dbIndex) {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.MOVE)
.key(key).add(dbIndex), BuilderFactory.LONG));
}
@Override
public Response move(final byte[] key, final int dbIndex) {
return appendCommand(new CommandObject<>(commandObjects.commandArguments(Protocol.Command.MOVE)
.key(key).add(dbIndex), BuilderFactory.LONG));
}
@Override
public Response copy(String srcKey, String dstKey, int db, boolean replace) {
return appendCommand(commandObjects.copy(srcKey, dstKey, db, replace));
}
@Override
public Response copy(byte[] srcKey, byte[] dstKey, int db, boolean replace) {
return appendCommand(commandObjects.copy(srcKey, dstKey, db, replace));
}
@Override
public Response migrate(String host, int port, byte[] key, int destinationDB, int timeout) {
return appendCommand(commandObjects.migrate(host, port, key, destinationDB, timeout));
}
@Override
public Response migrate(String host, int port, String key, int destinationDB, int timeout) {
return appendCommand(commandObjects.migrate(host, port, key, destinationDB, timeout));
}
@Override
public Response migrate(String host, int port, int destinationDB, int timeout, MigrateParams params, byte[]... keys) {
return appendCommand(commandObjects.migrate(host, port, destinationDB, timeout, params, keys));
}
@Override
public Response migrate(String host, int port, int destinationDB, int timeout, MigrateParams params, String... keys) {
return appendCommand(commandObjects.migrate(host, port, destinationDB, timeout, params, keys));
}
}