K - Key type.V - Value type.@ChannelHandler.Sharable public class CommandHandler<K,V> extends ChannelDuplexHandler implements RedisChannelWriter<K,V>
ChannelHandler responsible for writing redis commands and reading responses from the server.| Modifier and Type | Class and Description |
|---|---|
static class |
CommandHandler.LifecycleState |
ChannelHandler.Sharable| Modifier and Type | Field and Description |
|---|---|
protected ByteBuf |
buffer |
protected Channel |
channel |
protected ClientOptions |
clientOptions |
protected ClientResources |
clientResources |
protected Deque<RedisCommand<K,V,?>> |
commandBuffer |
protected long |
commandHandlerId |
protected Queue<RedisCommand<K,V,?>> |
queue |
protected RedisStateMachine<K,V> |
rsm |
protected Object |
stateLock |
protected Deque<RedisCommand<K,V,?>> |
transportBuffer |
protected AtomicLong |
writers |
| Constructor and Description |
|---|
CommandHandler(ClientOptions clientOptions,
ClientResources clientResources,
Queue<RedisCommand<K,V,?>> queue)
Initialize a new instance that handles commands from the supplied queue.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
activateCommandHandlerAndExecuteBufferedCommands(ChannelHandlerContext ctx) |
protected void |
bufferCommand(RedisCommand<K,V,?> command) |
void |
channelActive(ChannelHandlerContext ctx) |
void |
channelInactive(ChannelHandlerContext ctx) |
void |
channelRead(ChannelHandlerContext ctx,
Object msg) |
void |
channelRegistered(ChannelHandlerContext ctx) |
void |
channelUnregistered(ChannelHandlerContext ctx) |
void |
close()
Close the connection.
|
protected void |
decode(ChannelHandlerContext ctx,
ByteBuf buffer) |
protected void |
decrementWriters()
Decrement writers without any wait.
|
void |
exceptionCaught(ChannelHandlerContext ctx,
Throwable cause) |
void |
flushCommands()
Flush pending commands.
|
protected CommandHandler.LifecycleState |
getState() |
protected void |
incrementWriters()
Wait for stateLock and increment writers.
|
void |
initialState()
Reset the command-handler to the initial not-connected state.
|
boolean |
isClosed() |
protected void |
lockWritersExclusive()
Wait for stateLock and no writers.
|
protected String |
logPrefix() |
protected List<RedisCommand<K,V,?>> |
prepareReset() |
void |
reset()
Reset the writer state.
|
void |
setAutoFlushCommands(boolean autoFlush)
Disable or enable auto-flush behavior.
|
void |
setRedisChannelHandler(RedisChannelHandler<K,V> redisChannelHandler)
Set the corresponding connection instance in order to notify it about channel active/inactive state.
|
protected void |
setState(CommandHandler.LifecycleState lifecycleState) |
protected void |
unlockWritersExclusive()
Unlock writers.
|
<T,C extends RedisCommand<K,V,T>> |
write(C command)
Write a command on the channel.
|
void |
write(ChannelHandlerContext ctx,
Object msg,
ChannelPromise promise) |
protected <C extends RedisCommand<K,V,T>,T> |
writeToBuffer(C command) |
protected <C extends RedisCommand<K,V,T>,T> |
writeToChannel(C command,
Channel channel) |
bind, close, connect, deregister, disconnect, flush, readchannelReadComplete, channelWritabilityChanged, userEventTriggeredhandlerAdded, handlerRemoved, isSharableclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waithandlerAdded, handlerRemovedprotected final long commandHandlerId
protected final ClientOptions clientOptions
protected final ClientResources clientResources
protected final Queue<RedisCommand<K,V,?>> queue
protected final AtomicLong writers
protected final Object stateLock
protected final Deque<RedisCommand<K,V,?>> commandBuffer
protected final Deque<RedisCommand<K,V,?>> transportBuffer
protected final ByteBuf buffer
protected final RedisStateMachine<K,V> rsm
protected volatile Channel channel
public CommandHandler(ClientOptions clientOptions, ClientResources clientResources, Queue<RedisCommand<K,V,?>> queue)
clientOptions - client options for this connection, must not be nullclientResources - client resources for this connection, must not be nullqueue - The command queue, must not be nullpublic void channelRegistered(ChannelHandlerContext ctx) throws Exception
channelRegistered in interface ChannelInboundHandlerchannelRegistered in class ChannelInboundHandlerAdapterExceptionChannelInboundHandlerAdapter.channelRegistered(io.netty.channel.ChannelHandlerContext)public void channelUnregistered(ChannelHandlerContext ctx) throws Exception
channelUnregistered in interface ChannelInboundHandlerchannelUnregistered in class ChannelInboundHandlerAdapterExceptionpublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
channelRead in interface ChannelInboundHandlerchannelRead in class ChannelInboundHandlerAdapterExceptionChannelInboundHandlerAdapter.channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)protected void decode(ChannelHandlerContext ctx, ByteBuf buffer) throws InterruptedException
InterruptedExceptionpublic <T,C extends RedisCommand<K,V,T>> C write(C command)
RedisChannelWriterwrite in interface RedisChannelWriter<K,V>T - result typeC - command typecommand - the redis commandprotected <C extends RedisCommand<K,V,T>,T> void writeToBuffer(C command)
protected <C extends RedisCommand<K,V,T>,T> void writeToChannel(C command, Channel channel)
protected void bufferCommand(RedisCommand<K,V,?> command)
protected void incrementWriters()
protected void decrementWriters()
protected void lockWritersExclusive()
synchronized block to prevent interleaving with other
methods using writers. Sets writers to a negative value to create a lock for incrementWriters().protected void unlockWritersExclusive()
public void flushCommands()
RedisChannelWriterflushCommands in interface RedisChannelWriter<K,V>public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception
write in interface ChannelOutboundHandlerwrite in class ChannelDuplexHandlerExceptionChannelDuplexHandler.write(io.netty.channel.ChannelHandlerContext, java.lang.Object,
io.netty.channel.ChannelPromise)public void channelActive(ChannelHandlerContext ctx) throws Exception
channelActive in interface ChannelInboundHandlerchannelActive in class ChannelInboundHandlerAdapterExceptionprotected void activateCommandHandlerAndExecuteBufferedCommands(ChannelHandlerContext ctx)
public void channelInactive(ChannelHandlerContext ctx) throws Exception
channelInactive in interface ChannelInboundHandlerchannelInactive in class ChannelInboundHandlerAdapterExceptionChannelInboundHandlerAdapter.channelInactive(io.netty.channel.ChannelHandlerContext)protected void setState(CommandHandler.LifecycleState lifecycleState)
protected CommandHandler.LifecycleState getState()
public boolean isClosed()
protected List<RedisCommand<K,V,?>> prepareReset()
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
exceptionCaught in interface ChannelHandlerexceptionCaught in interface ChannelInboundHandlerexceptionCaught in class ChannelInboundHandlerAdapterExceptionpublic void close()
close in interface RedisChannelWriter<K,V>close in interface Closeableclose in interface AutoCloseablepublic void reset()
reset in interface RedisChannelWriter<K,V>public void initialState()
public void setRedisChannelHandler(RedisChannelHandler<K,V> redisChannelHandler)
RedisChannelWritersetRedisChannelHandler in interface RedisChannelWriter<K,V>redisChannelHandler - the channel handler (external connection object)public void setAutoFlushCommands(boolean autoFlush)
RedisChannelWriterRedisChannelWriter.flushCommands() is
issued. After calling RedisChannelWriter.flushCommands() commands are sent to the transport and executed by Redis.setAutoFlushCommands in interface RedisChannelWriter<K,V>autoFlush - state of autoFlush.protected String logPrefix()
Copyright © 2016. All rights reserved.