gpt4 book ai didi

redis - Jedis 存储困惑,这个问题是 Redis 还是 Jedis?

转载 作者:可可西里 更新时间:2023-11-01 11:23:02 25 4
gpt4 key购买 nike

以下 Java 代码将一百万对整数插入到 Redis 中。

 public class JedisInsertion { 
public static byte[] fromInt(int v) {
return ByteBuffer.allocate(4).putInt(v).array();
}
public static void main(String args[]) {
Jedis j = new Jedis("localhost");
for (int i = 0;i<1000*1000;i++){
j.set(fromInt(i),fromInt(i));
}
}
}

这里是redis信息输出

... 
used_memory:89319664
arch_bits:64
...

89319664 表示每个键值对约 89 个字节。

我原本期望大约 8 MB(4 个字节的键 + 4 个字节的值)。

我还在 32 位模式下编译了 redis(仍在 64 位上运行测试位机)。

32位版本redis的结果:

已用内存:68831664 => 每个键值对 68 个字节。

这两个结果都比我预期的高出好几倍。

当我使用 CLI 查看 redis 时,我看到一个典型的 key 如下所示:“\x00\x00\xc2\xff”

感谢您的反馈

PS - 我在 64 位机器上使用 Redis 2.2.14 和 Jedis 2.0

PSS - 我还尝试按照其中一条评论的建议将所有值存储在一个散列中,这是代码:

for (int i = 0;i<1000*1000;i++){
j.hset("my-hash".getBytes(),fromInt(i),fromInt(i));
}

结果如下:

used_memory_rss:84676608 (for 32bit build)
used_memory:105319712 (for 64bit build)

当我使用单个散列时,结果更糟。

最佳答案

每个键/值类型 68 个字节是正确的。 Redis 不会在内部将事物存储为纯文本文件,否则它无法快速查找它,无法拥有不同类型的对象,等等。有一个相关的开销。 Redis.io 上的文档中有更多相关信息。

关于redis - Jedis 存储困惑,这个问题是 Redis 还是 Jedis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com