第一次使用Lettuce 5作为Redis客户端时,我发现仅创建RedisCommands<String, Long>
来获取/将Redis值设置为Long感到困惑。
我还不清楚我如何才能做到这一点。据我所知,最简单的方法是使用RedisClient
重载的constructor,它需要RedisCodec
和RedisURI
,但是似乎我还需要实现编解码器的解码/编码方法?
由于存储数字是Redis相当普遍的用例,因此我发现这种方法过时了,我很惊讶没有整数/长整数的预定义编解码器。鉴于此,我怀疑可能有一个更简单的选择,而我还没有遇到过。有替代方法吗?
最佳答案
我遇到了类似的需求,最终编写了以下编解码器:
import io.lettuce.core.codec.RedisCodec;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.StandardCharsets;
public class StringLongRedisCodec implements RedisCodec<String, Long> {
@Override
public String decodeKey(final ByteBuffer bytes) {
return StandardCharsets.US_ASCII.decode(bytes).toString();
}
@Override
public Long decodeValue(final ByteBuffer bytes) {
final CharBuffer charSequence = StandardCharsets.US_ASCII.decode(bytes);
return Long.parseLong(charSequence, 0, charSequence.length(), 10);
}
@Override
public ByteBuffer encodeKey(final String key) {
return StandardCharsets.US_ASCII.encode(key);
}
@Override
public ByteBuffer encodeValue(final Long value) {
return ByteBuffer.wrap(Long.toString(value).getBytes());
}
}
关于java - 生菜RedisCodec数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58274944/