创建Lettuce StatefulRedisConnection以将字符串存储为键,将字节数组存储为值

时间:2017-11-14 17:44:57

标签: spring-data-redis lettuce

我有一个Spring启动应用程序,它连接到AWS上的Redis群集。我正在尝试Lettuce,并希望创建一个StatefulRedisConnection来存储键作为字符串,但值为字节数组。我尝试使用内置的ByteArrayCodec,但它将键和值都作为字节数组。

我是Lettuce的新手,所以我不确定是否需要编写自定义编解码器。如果是这样,我该怎么写呢?会有任何性能问题吗?还是我走错了路?

1 个答案:

答案 0 :(得分:0)

下面的代码将允许您将字符串键和字节数组作为值。

public class StringByteCodec implements RedisCodec<String, byte[]> {

    public static final ByteArrayCodec INSTANCE = new ByteArrayCodec();
    private static final byte[] EMPTY = new byte[0];
    private final Charset charset = Charset.forName("UTF-8");

    @Override
    public String decodeKey(final ByteBuffer bytes) {
        return charset.decode(bytes).toString();
    }

    @Override
    public byte[] decodeValue(final ByteBuffer bytes) {
        return getBytes(bytes);
    }

    @Override
    public ByteBuffer encodeKey(final String key) {
        return charset.encode(key);
    }

    @Override
    public ByteBuffer encodeValue(final byte[] value) {
        if (value == null) {
            return ByteBuffer.wrap(EMPTY);
        }

        return ByteBuffer.wrap(value);
    }

    private static byte[] getBytes(final ByteBuffer buffer) {
        final byte[] b = new byte[buffer.remaining()];
        buffer.get(b);
        return b;
    }

}