我有一个Spring启动应用程序,它连接到AWS上的Redis群集。我正在尝试Lettuce,并希望创建一个StatefulRedisConnection
来存储键作为字符串,但值为字节数组。我尝试使用内置的ByteArrayCodec
,但它将键和值都作为字节数组。
我是Lettuce的新手,所以我不确定是否需要编写自定义编解码器。如果是这样,我该怎么写呢?会有任何性能问题吗?还是我走错了路?
答案 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;
}
}