Home / Class/ RedisEncoder Class — netty Architecture

RedisEncoder Class — netty Architecture

Architecture documentation for the RedisEncoder class in RedisEncoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  917d8b11_c533_469c_d2a7_d3500be572e6["RedisEncoder"]
  51cbecd8_4cd3_a590_e0a6_882cd52f674e["RedisEncoder.java"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|defined in| 51cbecd8_4cd3_a590_e0a6_882cd52f674e
  cac057b4_4b20_d620_711d_6014af979f4c["RedisEncoder()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| cac057b4_4b20_d620_711d_6014af979f4c
  af16f69c_4486_059f_fc29_2d56e92a8aa1["encode()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| af16f69c_4486_059f_fc29_2d56e92a8aa1
  709fcc53_354a_bc98_e002_ecd01cc6fa7a["writeRedisMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| 709fcc53_354a_bc98_e002_ecd01cc6fa7a
  b5d44a33_518e_46a7_7be7_20e26d034eec["writeInlineCommandMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| b5d44a33_518e_46a7_7be7_20e26d034eec
  4e7402e9_e089_6844_a1e3_78d59fded319["writeSimpleStringMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| 4e7402e9_e089_6844_a1e3_78d59fded319
  d3283717_b71b_820d_0a7b_31fad0d196a6["writeErrorMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| d3283717_b71b_820d_0a7b_31fad0d196a6
  9cfa89c5_4111_f664_9191_569db515739e["writeString()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| 9cfa89c5_4111_f664_9191_569db515739e
  caae0006_9740_34a8_f941_5ddb07fe3009["writeIntegerMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| caae0006_9740_34a8_f941_5ddb07fe3009
  7e10357c_f4d5_f8de_587b_14da5fad2b4d["writeBulkStringHeader()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| 7e10357c_f4d5_f8de_587b_14da5fad2b4d
  a804c78c_b98b_f6e9_9f3e_310c38008d1e["writeBulkStringContent()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| a804c78c_b98b_f6e9_9f3e_310c38008d1e
  a4e8ec4f_e4ac_aefb_fc36_65a227b73a02["writeFullBulkStringMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| a4e8ec4f_e4ac_aefb_fc36_65a227b73a02
  f7c77be5_b298_b830_282c_f456d5cf0d0e["writeArrayHeader()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| f7c77be5_b298_b830_282c_f456d5cf0d0e
  94a29b14_577b_a4fd_829c_c03ed966db45["writeArrayMessage()"]
  917d8b11_c533_469c_d2a7_d3500be572e6 -->|method| 94a29b14_577b_a4fd_829c_c03ed966db45

Relationship Graph

Source Code

codec-redis/src/main/java/io/netty/handler/codec/redis/RedisEncoder.java lines 33–208

@UnstableApi
public class RedisEncoder extends MessageToMessageEncoder<RedisMessage> {

    private final RedisMessagePool messagePool;

    /**
     * Creates a new instance with default {@code messagePool}.
     */
    public RedisEncoder() {
        this(FixedRedisMessagePool.INSTANCE);
    }

    /**
     * Creates a new instance.
     * @param messagePool the predefined message pool.
     */
    public RedisEncoder(RedisMessagePool messagePool) {
        super(RedisMessage.class);
        this.messagePool = ObjectUtil.checkNotNull(messagePool, "messagePool");
    }

    @Override
    protected void encode(ChannelHandlerContext ctx, RedisMessage msg, List<Object> out) throws Exception {
        try {
            writeRedisMessage(ctx.alloc(), msg, out);
        } catch (CodecException e) {
            throw e;
        } catch (Exception e) {
            throw new CodecException(e);
        }
    }

    private void writeRedisMessage(ByteBufAllocator allocator, RedisMessage msg, List<Object> out) {
        if (msg instanceof InlineCommandRedisMessage) {
            writeInlineCommandMessage(allocator, (InlineCommandRedisMessage) msg, out);
        } else if (msg instanceof SimpleStringRedisMessage) {
            writeSimpleStringMessage(allocator, (SimpleStringRedisMessage) msg, out);
        } else if (msg instanceof ErrorRedisMessage) {
            writeErrorMessage(allocator, (ErrorRedisMessage) msg, out);
        } else if (msg instanceof IntegerRedisMessage) {
            writeIntegerMessage(allocator, (IntegerRedisMessage) msg, out);
        } else if (msg instanceof FullBulkStringRedisMessage) {
            writeFullBulkStringMessage(allocator, (FullBulkStringRedisMessage) msg, out);
        } else if (msg instanceof BulkStringRedisContent) {
            writeBulkStringContent(allocator, (BulkStringRedisContent) msg, out);
        } else if (msg instanceof BulkStringHeaderRedisMessage) {
            writeBulkStringHeader(allocator, (BulkStringHeaderRedisMessage) msg, out);
        } else if (msg instanceof ArrayHeaderRedisMessage) {
            writeArrayHeader(allocator, (ArrayHeaderRedisMessage) msg, out);
        } else if (msg instanceof ArrayRedisMessage) {
            writeArrayMessage(allocator, (ArrayRedisMessage) msg, out);
        } else {
            throw new CodecException("unknown message type: " + msg);
        }
    }

    private static void writeInlineCommandMessage(ByteBufAllocator allocator, InlineCommandRedisMessage msg,
                                                 List<Object> out) {
        writeString(allocator, RedisMessageType.INLINE_COMMAND, msg.content(), out);
    }

    private static void writeSimpleStringMessage(ByteBufAllocator allocator, SimpleStringRedisMessage msg,
                                                 List<Object> out) {
        writeString(allocator, RedisMessageType.SIMPLE_STRING, msg.content(), out);
    }

    private static void writeErrorMessage(ByteBufAllocator allocator, ErrorRedisMessage msg, List<Object> out) {
        writeString(allocator, RedisMessageType.ERROR, msg.content(), out);
    }

    private static void writeString(ByteBufAllocator allocator, RedisMessageType type, String content,
                                    List<Object> out) {
        ByteBuf buf = allocator.ioBuffer(type.length() + ByteBufUtil.utf8MaxBytes(content) +
                                         RedisConstants.EOL_LENGTH);
        type.writeTo(buf);
        ByteBufUtil.writeUtf8(buf, content);
        buf.writeShort(RedisConstants.EOL_SHORT);
        out.add(buf);
    }

    private void writeIntegerMessage(ByteBufAllocator allocator, IntegerRedisMessage msg, List<Object> out) {

Frequently Asked Questions

What is the RedisEncoder class?
RedisEncoder is a class in the netty codebase, defined in codec-redis/src/main/java/io/netty/handler/codec/redis/RedisEncoder.java.
Where is RedisEncoder defined?
RedisEncoder is defined in codec-redis/src/main/java/io/netty/handler/codec/redis/RedisEncoder.java at line 33.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free