我的要求是,在redisdb中,键应存储为字符串,值应存储为字节数组。我能够在java中使用生菜的RedisCodec实现同样的功能。但当我通过reds-cli查看值时,它似乎是原始字符串本身,而不是字节格式。以下是我正在尝试使用的简单代码。
RedisURI redisURI = RedisURI.builder().withHost("localhost")
.withPort(6379)
.build();
RedisClient redisClient = RedisClient.create(redisURI);
RedisCommands<String, byte[]> redisCommands = redisClient.connect(RedisCodec.of(new StringCodec(), new ByteArrayCodec())).sync();
redisCommands.set("key", "value".getBytes(StandardCharsets.UTF_8));
System.out.println(redisCommands.get("key"));
控制台O/p:[B@3bd7f8dc
redis cli o/p:
127.0.0.1:6379>获取密钥
"值";
我用生菜做redis客户。我无法理解为什么我从redis-cli获得的值是字符串本身而不是字节格式。
感谢您的帮助。提前谢谢。
我相信下面的答案可以帮助您理解从redis-cli读取字节值。
如何在Redis控制台中读取Redis二进制值
这里还有关于redis-cli的详细说明。我希望这是有道理的。https://redis.io/docs/manual/cli/
RedisCodec
的第二个参数是如何将值数据传输到Redis Server,在您的情况下是通过ByteArrayCodec
,一旦使用get
检索到值数据,就会将其序列化回原始形式。
我用来从redis读取字节数组的东西是这样的:
byte[] value = redisSyncConnection.get("key");
try (ByteArrayInputStream bis = new ByteArrayInputStream(value);
ObjectInputStream ois = new ObjectInputStream(bis)) {
String valueString = (String) ois.readObject();
System.out.println(valueString);
}