package com.lambdaworks.redis;
import java.io.Closeable;
import java.util.List;
import java.util.Map;
import com.lambdaworks.redis.api.async.BaseRedisAsyncCommands;
import com.lambdaworks.redis.output.CommandOutput;
import com.lambdaworks.redis.protocol.CommandArgs;
import com.lambdaworks.redis.protocol.ProtocolKeyword;
/**
*
* Basic asynchronous executed commands.
*
* @author Mark Paluch
* @param <K> Key type.
* @param <V> Value type.
* @since 3.0
* @deprecated Use {@link BaseRedisAsyncCommands}
*/
@Deprecated
public interface BaseRedisAsyncConnection<K, V> extends Closeable, BaseRedisAsyncCommands<K, V> {
/**
* Post a message to a channel.
*
* @param channel the channel type: key
* @param message the message type: value
* @return RedisFuture<Long> integer-reply the number of clients that received the message.
*/
RedisFuture<Long> publish(K channel, V message);
/**
* Lists the currently *active channels*.
*
* @return RedisFuture<List<K>> array-reply a list of active channels, optionally matching the specified
* pattern.
*/
RedisFuture<List<K>> pubsubChannels();
/**
* Lists the currently *active channels*.
*
* @param channel the key
* @return RedisFuture<List<K>> array-reply a list of active channels, optionally matching the specified
* pattern.
*/
RedisFuture<List<K>> pubsubChannels(K channel);
/**
* Returns the number of subscribers (not counting clients subscribed to patterns) for the specified channels.
*
* @param channels channel keys
* @return array-reply a list of channels and number of subscribers for every channel.
*/
RedisFuture<Map<K, Long>> pubsubNumsub(K... channels);
/**
* Returns the number of subscriptions to patterns.
*
* @return RedisFuture<Long> integer-reply the number of patterns all the clients are subscribed to.
*/
RedisFuture<Long> pubsubNumpat();
/**
* Echo the given string.
*
* @param msg the message type: value
* @return RedisFuture<V> bulk-string-reply
*/
RedisFuture<V> echo(V msg);
/**
* Return the role of the instance in the context of replication.
*
* @return RedisFuture<List<Object>> array-reply where the first element is one of master, slave, sentinel and
* the additional elements are role-specific.
*/
RedisFuture<List<Object>> role();
/**
* Ping the server.
*
* @return RedisFuture<String> simple-string-reply
*/
RedisFuture<String> ping();
/**
* Close the connection.
*
* @return RedisFuture<String> simple-string-reply always OK.
*/
RedisFuture<String> quit();
/**
* Create a SHA1 digest from a Lua script.
*
* @param script script content
* @return the SHA1 value
*/
String digest(V script);
/**
* Discard all commands issued after MULTI.
*
* @return RedisFuture<String> simple-string-reply always {@code OK}.
*/
RedisFuture<String> discard();
/**
* Execute all commands issued after MULTI.
*
* @return RedisFuture<List<Object>> array-reply each element being the reply to each of the commands in the
* atomic transaction.
*
* When using {@code WATCH}, {@code EXEC} can return a
*/
RedisFuture<List<Object>> exec();
/**
* Mark the start of a transaction block.
*
* @return RedisFuture<String> simple-string-reply always {@code OK}.
*/
RedisFuture<String> multi();
/**
* Watch the given keys to determine execution of the MULTI/EXEC block.
*
* @param keys the key
* @return RedisFuture<String> simple-string-reply always {@code OK}.
*/
RedisFuture<String> watch(K... keys);
/**
* Forget about all watched keys.
*
* @return RedisFuture<String> simple-string-reply always {@code OK}.
*/
RedisFuture<String> unwatch();
/**
* Wait for replication.
*
* @param replicas minimum number of replicas
* @param timeout timeout in milliseconds
* @return number of replicas
*/
RedisFuture<Long> waitForReplication(int replicas, long timeout);
/**
* Dispatch a command to the Redis Server. Please note the command output type must fit to the command response.
*
* @param type the command, must not be {@literal null}.
* @param output the command output, must not be {@literal null}.
* @param <T> response type
* @return the command response
*/
<T> RedisFuture<T> dispatch(ProtocolKeyword type, CommandOutput<K, V, T> output);
/**
* Dispatch a command to the Redis Server. Please note the command output type must fit to the command response.
*
* @param type the command, must not be {@literal null}.
* @param output the command output, must not be {@literal null}.
* @param args the command arguments, must not be {@literal null}.
* @param <T> response type
* @return the command response
*/
<T> RedisFuture<T> dispatch(ProtocolKeyword type, CommandOutput<K, V, T> output, CommandArgs<K, V> args);
/**
* Close the connection. The connection will become not usable anymore as soon as this method was called.
*/
@Override
void close();
/**
*
* @return true if the connection is open (connected and not closed).
*/
boolean isOpen();
/**
* Disable or enable auto-flush behavior. Default is {@literal true}. If autoFlushCommands is disabled, multiple commands
* can be issued without writing them actually to the transport. Commands are buffered until a {@link #flushCommands()} is
* issued. After calling {@link #flushCommands()} commands are sent to the transport and executed by Redis.
*
* @param autoFlush state of autoFlush.
*/
void setAutoFlushCommands(boolean autoFlush);
/**
* Flush pending commands. This commands forces a flush on the channel and can be used to buffer ("pipeline") commands to
* achieve batching. No-op if channel is not connected.
*/
void flushCommands();
}