From 4f8663f21ac0a3c2fa87280bdc5c914f6c6ee3f9 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 15 Apr 2016 16:57:38 +0300 Subject: [PATCH] Command encoder handlers now are singletons --- .../java/org/redisson/client/RedisClient.java | 6 +++--- ...sListEncoder.java => CommandBatchEncoder.java} | 9 +++++++-- .../redisson/client/handler/CommandEncoder.java | 15 +++++++++------ 3 files changed, 19 insertions(+), 11 deletions(-) rename src/main/java/org/redisson/client/handler/{CommandsListEncoder.java => CommandBatchEncoder.java} (77%) diff --git a/src/main/java/org/redisson/client/RedisClient.java b/src/main/java/org/redisson/client/RedisClient.java index 2aa645755..32e5445aa 100644 --- a/src/main/java/org/redisson/client/RedisClient.java +++ b/src/main/java/org/redisson/client/RedisClient.java @@ -19,7 +19,7 @@ import java.net.InetSocketAddress; import org.redisson.client.handler.CommandDecoder; import org.redisson.client.handler.CommandEncoder; -import org.redisson.client.handler.CommandsListEncoder; +import org.redisson.client.handler.CommandBatchEncoder; import org.redisson.client.handler.CommandsQueue; import org.redisson.client.handler.ConnectionWatchdog; @@ -62,8 +62,8 @@ public class RedisClient { @Override protected void initChannel(Channel ch) throws Exception { ch.pipeline().addFirst(new ConnectionWatchdog(bootstrap, channels), - new CommandEncoder(), - new CommandsListEncoder(), + CommandEncoder.INSTANCE, + CommandBatchEncoder.INSTANCE, new CommandsQueue(), new CommandDecoder()); } diff --git a/src/main/java/org/redisson/client/handler/CommandsListEncoder.java b/src/main/java/org/redisson/client/handler/CommandBatchEncoder.java similarity index 77% rename from src/main/java/org/redisson/client/handler/CommandsListEncoder.java rename to src/main/java/org/redisson/client/handler/CommandBatchEncoder.java index a4c4ffef9..9412b5ab4 100644 --- a/src/main/java/org/redisson/client/handler/CommandsListEncoder.java +++ b/src/main/java/org/redisson/client/handler/CommandBatchEncoder.java @@ -20,6 +20,7 @@ import org.redisson.client.protocol.CommandsData; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelHandler.Sharable; import io.netty.handler.codec.MessageToByteEncoder; /** @@ -27,12 +28,16 @@ import io.netty.handler.codec.MessageToByteEncoder; * @author Nikita Koksharov * */ -public class CommandsListEncoder extends MessageToByteEncoder { +@Sharable +public class CommandBatchEncoder extends MessageToByteEncoder { + public static final CommandBatchEncoder INSTANCE = new CommandBatchEncoder(); + @Override protected void encode(ChannelHandlerContext ctx, CommandsData msg, ByteBuf out) throws Exception { + CommandEncoder encoder = ctx.pipeline().get(CommandEncoder.class); for (CommandData commandData : msg.getCommands()) { - ctx.pipeline().get(CommandEncoder.class).encode(ctx, (CommandData)commandData, out); + encoder.encode(ctx, commandData, out); } } diff --git a/src/main/java/org/redisson/client/handler/CommandEncoder.java b/src/main/java/org/redisson/client/handler/CommandEncoder.java index 2a8b0af2c..ed245e211 100644 --- a/src/main/java/org/redisson/client/handler/CommandEncoder.java +++ b/src/main/java/org/redisson/client/handler/CommandEncoder.java @@ -17,17 +17,17 @@ package org.redisson.client.handler; import java.util.List; -import org.redisson.client.codec.ByteArrayCodec; import org.redisson.client.codec.StringCodec; import org.redisson.client.protocol.CommandData; -import org.redisson.client.protocol.Encoder; import org.redisson.client.protocol.DefaultParamsEncoder; +import org.redisson.client.protocol.Encoder; +import org.redisson.client.protocol.RedisCommand.ValueType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.redisson.client.protocol.RedisCommand.ValueType; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelHandler.Sharable; import io.netty.handler.codec.MessageToByteEncoder; import io.netty.util.CharsetUtil; @@ -39,8 +39,11 @@ import io.netty.util.CharsetUtil; * @author Nikita Koksharov * */ -public class CommandEncoder extends MessageToByteEncoder> { +@Sharable +public class CommandEncoder extends MessageToByteEncoder> { + public static final CommandEncoder INSTANCE = new CommandEncoder(); + private final Logger log = LoggerFactory.getLogger(getClass()); private final Encoder paramsEncoder = new DefaultParamsEncoder(); @@ -50,7 +53,7 @@ public class CommandEncoder extends MessageToByteEncoder msg, ByteBuf out) throws Exception { + protected void encode(ChannelHandlerContext ctx, CommandData msg, ByteBuf out) throws Exception { out.writeByte(ARGS_PREFIX); int len = 1 + msg.getParams().length; if (msg.getCommand().getSubName() != null) { @@ -91,7 +94,7 @@ public class CommandEncoder extends MessageToByteEncoder msg, int param) { + private Encoder selectEncoder(CommandData msg, int param) { int typeIndex = 0; List inParamType = msg.getCommand().getInParamType(); if (inParamType.size() > 1) {