From fbef4ee89a4ebb69c960e68a0f536fdcf5b0d893 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 16 Sep 2015 16:37:10 +0300 Subject: [PATCH] Codec's encoder/decoder instances caching --- .../org/redisson/client/codec/LongCodec.java | 14 +-- .../redisson/client/codec/StringCodec.java | 28 +++--- .../org/redisson/codec/JsonJacksonCodec.java | 32 ++++--- .../java/org/redisson/codec/KryoCodec.java | 91 ++++++++++--------- .../redisson/codec/SerializationCodec.java | 52 ++++++----- 5 files changed, 116 insertions(+), 101 deletions(-) diff --git a/src/main/java/org/redisson/client/codec/LongCodec.java b/src/main/java/org/redisson/client/codec/LongCodec.java index 8d352602a..53bf14604 100644 --- a/src/main/java/org/redisson/client/codec/LongCodec.java +++ b/src/main/java/org/redisson/client/codec/LongCodec.java @@ -25,14 +25,16 @@ public class LongCodec extends StringCodec { public static final LongCodec INSTANCE = new LongCodec(); + public final Decoder decoder = new Decoder() { + @Override + public Object decode(ByteBuf buf, State state) { + return Long.valueOf(buf.toString(CharsetUtil.UTF_8)); + } + }; + @Override public Decoder getValueDecoder() { - return new Decoder() { - @Override - public Object decode(ByteBuf buf, State state) { - return Long.valueOf(buf.toString(CharsetUtil.UTF_8)); - } - }; + return decoder; } } diff --git a/src/main/java/org/redisson/client/codec/StringCodec.java b/src/main/java/org/redisson/client/codec/StringCodec.java index 53b07a6a4..8a5e2f19c 100644 --- a/src/main/java/org/redisson/client/codec/StringCodec.java +++ b/src/main/java/org/redisson/client/codec/StringCodec.java @@ -28,24 +28,28 @@ public class StringCodec implements Codec { public static final StringCodec INSTANCE = new StringCodec(); + private final Encoder encoder = new Encoder() { + @Override + public byte[] encode(Object in) throws IOException { + return in.toString().getBytes("UTF-8"); + } + }; + + private final Decoder decoder = new Decoder() { + @Override + public Object decode(ByteBuf buf, State state) { + return buf.toString(CharsetUtil.UTF_8); + } + }; + @Override public Decoder getValueDecoder() { - return new Decoder() { - @Override - public Object decode(ByteBuf buf, State state) { - return buf.toString(CharsetUtil.UTF_8); - } - }; + return decoder; } @Override public Encoder getValueEncoder() { - return new Encoder() { - @Override - public byte[] encode(Object in) throws IOException { - return in.toString().getBytes("UTF-8"); - } - }; + return encoder; } @Override diff --git a/src/main/java/org/redisson/codec/JsonJacksonCodec.java b/src/main/java/org/redisson/codec/JsonJacksonCodec.java index 99d0fb720..564a97881 100755 --- a/src/main/java/org/redisson/codec/JsonJacksonCodec.java +++ b/src/main/java/org/redisson/codec/JsonJacksonCodec.java @@ -44,7 +44,21 @@ import io.netty.buffer.ByteBufInputStream; */ public class JsonJacksonCodec implements Codec { - private ObjectMapper mapObjectMapper = new ObjectMapper(); + private final ObjectMapper mapObjectMapper = new ObjectMapper(); + + private final Encoder encoder = new Encoder() { + @Override + public byte[] encode(Object in) throws IOException { + return mapObjectMapper.writeValueAsBytes(in); + } + }; + + private final Decoder decoder = new Decoder() { + @Override + public Object decode(ByteBuf buf, State state) throws IOException { + return mapObjectMapper.readValue(new ByteBufInputStream(buf), Object.class); + } + }; public JsonJacksonCodec() { init(mapObjectMapper); @@ -94,24 +108,12 @@ public class JsonJacksonCodec implements Codec { @Override public Decoder getMapValueDecoder() { - return new Decoder() { - - @Override - public Object decode(ByteBuf buf, State state) throws IOException { - return mapObjectMapper.readValue(new ByteBufInputStream(buf), Object.class); - } - }; + return decoder; } @Override public Encoder getMapValueEncoder() { - return new Encoder() { - - @Override - public byte[] encode(Object in) throws IOException { - return mapObjectMapper.writeValueAsBytes(in); - } - }; + return encoder; } @Override diff --git a/src/main/java/org/redisson/codec/KryoCodec.java b/src/main/java/org/redisson/codec/KryoCodec.java index 3518f8fbe..2da3febad 100755 --- a/src/main/java/org/redisson/codec/KryoCodec.java +++ b/src/main/java/org/redisson/codec/KryoCodec.java @@ -93,6 +93,51 @@ public class KryoCodec implements Codec { private final KryoPool kryoPool; + private final Decoder decoder = new Decoder() { + @Override + public Object decode(ByteBuf buf, State state) throws IOException { + Kryo kryo = null; + try { + kryo = kryoPool.get(); + return kryo.readClassAndObject(new Input(new ByteBufInputStream(buf))); + } catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + throw new RedissonKryoCodecException(e); + } finally { + if (kryo != null) { + kryoPool.yield(kryo); + } + } + } + }; + + private final Encoder encoder = new Encoder() { + + @Override + public byte[] encode(Object in) throws IOException { + Kryo kryo = null; + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Output output = new Output(baos); + kryo = kryoPool.get(); + kryo.writeClassAndObject(output, in); + output.close(); + return baos.toByteArray(); + } catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + throw new RedissonKryoCodecException(e); + } finally { + if (kryo != null) { + kryoPool.yield(kryo); + } + } + } + }; + public KryoCodec() { this(new KryoPoolImpl(Collections.>emptyList())); } @@ -128,54 +173,12 @@ public class KryoCodec implements Codec { @Override public Decoder getValueDecoder() { - return new Decoder() { - - @Override - public Object decode(ByteBuf buf, State state) throws IOException { - Kryo kryo = null; - try { - kryo = kryoPool.get(); - return kryo.readClassAndObject(new Input(new ByteBufInputStream(buf))); - } catch (Exception e) { - if (e instanceof RuntimeException) { - throw (RuntimeException) e; - } - throw new RedissonKryoCodecException(e); - } finally { - if (kryo != null) { - kryoPool.yield(kryo); - } - } - } - }; + return decoder; } @Override public Encoder getValueEncoder() { - return new Encoder() { - - @Override - public byte[] encode(Object in) throws IOException { - Kryo kryo = null; - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Output output = new Output(baos); - kryo = kryoPool.get(); - kryo.writeClassAndObject(output, in); - output.close(); - return baos.toByteArray(); - } catch (Exception e) { - if (e instanceof RuntimeException) { - throw (RuntimeException) e; - } - throw new RedissonKryoCodecException(e); - } finally { - if (kryo != null) { - kryoPool.yield(kryo); - } - } - } - }; + return encoder; } } diff --git a/src/main/java/org/redisson/codec/SerializationCodec.java b/src/main/java/org/redisson/codec/SerializationCodec.java index 9234af398..b698bd130 100644 --- a/src/main/java/org/redisson/codec/SerializationCodec.java +++ b/src/main/java/org/redisson/codec/SerializationCodec.java @@ -35,6 +35,32 @@ import io.netty.buffer.ByteBufInputStream; */ public class SerializationCodec implements Codec { + private final Decoder decoder = new Decoder() { + @Override + public Object decode(ByteBuf buf, State state) throws IOException { + try { + ObjectInputStream inputStream = new ObjectInputStream(new ByteBufInputStream(buf)); + return inputStream.readObject(); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new IOException(e); + } + } + }; + + private final Encoder encoder = new Encoder() { + + @Override + public byte[] encode(Object in) throws IOException { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + ObjectOutputStream outputStream = new ObjectOutputStream(result); + outputStream.writeObject(in); + outputStream.close(); + return result.toByteArray(); + } + }; + @Override public Decoder getMapValueDecoder() { return getValueDecoder(); @@ -57,34 +83,12 @@ public class SerializationCodec implements Codec { @Override public Decoder getValueDecoder() { - return new Decoder() { - @Override - public Object decode(ByteBuf buf, State state) throws IOException { - try { - ObjectInputStream inputStream = new ObjectInputStream(new ByteBufInputStream(buf)); - return inputStream.readObject(); - } catch (IOException e) { - throw e; - } catch (Exception e) { - throw new IOException(e); - } - } - }; + return decoder; } @Override public Encoder getValueEncoder() { - return new Encoder() { - - @Override - public byte[] encode(Object in) throws IOException { - ByteArrayOutputStream result = new ByteArrayOutputStream(); - ObjectOutputStream outputStream = new ObjectOutputStream(result); - outputStream.writeObject(in); - outputStream.close(); - return result.toByteArray(); - } - }; + return encoder; } }