首页 > 解决方案 > 用于数字的生菜 RedisCodec

问题描述

第一次使用 Lettuce 5 作为 Redis 客户端,我发现简单地创建一个RedisCommands<String, Long>用于获取/设置 Redis 值的 Long 相当令人困惑。

我有点不清楚如何做到这一点。据我所知,最简单的方法是使用带有and的RedisClient重载构造函数,但似乎我还需要实现编解码器解码/编码方法?RedisCodecRedisURI

由于使用 Redis 存储数字是一个相当常见的用例,我发现这种方法相当臃肿,我很惊讶没有预定义的整数/长编解码器。鉴于此,我怀疑可能有一个我没有遇到过的更简单的替代方案。有替代方法吗?

标签: javaredislettuce

解决方案


我遇到了类似的需求,最终编写了以下编解码器:

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());
    }

}

推荐阅读