以下 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的结果:
used_memory: 68831664 => 每个键值对 68 个字节。
这两个结果都比我预期的要高几倍。
当我使用 CLI 查看 redis 时,我看到一个典型的键如下所示:“\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)
当我使用单个哈希时,结果会更糟。