第一次使用Lettuce 5作为Redis客户端时,我发现仅创建RedisCommands<String, Long>来获取/将Redis值设置为Long感到困惑。
我还不清楚我如何才能做到这一点。据我所知,最简单的方法是使用RedisClient重载的constructor,它需要RedisCodecRedisURI,但是似乎我还需要实现编解码器的解码/编码方法?
由于存储数字是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/

10-11 05:00