use*_*636 7 java redis lettuce
第一次使用 Lettuce 5 作为 Redis 客户端,我发现简单地创建一个RedisCommands<String, Long>用于获取/设置 Redis 值作为 Long 的对象相当混乱。
我有点不清楚我如何才能做到这一点。据我所知,最简单的方法是使用带有and的RedisClient重载构造函数,但似乎我还需要实现编解码器解码/编码方法?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());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |