我正在使用redis并希望将超过1百万个密钥存储为具有5个字段的哈希集。
起初它看起来像那样:
key : {
a : 1,
b : 2,
c : 3,
d : 4,
e : 5
}
1M键使用了大约130MB的内存。然后我发现了Instagram开发人员的帖子:http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value
所以我调整了我的方法:
key1 : {
1a : 1,
1b : 2,
1c : 3,
1d : 4,
1e : 5,
2a : 1,
...
}
key2 : {
1a : 1,
1b : 2,
1c : 3,
1d : 4,
1e : 5,
2a : 1,
...
}
...
这仅用于500k条目就超过了200MB。那么在我的数据中有更好的结构吗?
// EDIT
好的,我有一个名为' user'我想在redis中保存5个字段('姓名','电子邮件','年龄','性别','活性&#39)。所以一开始我使用hmset命令通过nodejs' redis' -package在redis中创建一个条目。
userId : {
name : Emil Example,
email : email@stackoverflow.com,
age : 20,
gender : m,
active : true
}
因此,我创建了1M个虚拟数据条目,并通过“信息”检查了内存使用情况。命令。约~130MB。然后我阅读了Instagram博客及其对桶的使用。所以我用我的数据(userID:' 12345')实现了它:
12 : {
345name : Emil Example,
345email : email@stackoverflow.com,
345age : 20,
345gender : m,
345active : true
}
当然每个以' 12'开头的用户ID会掉进这个桶里。在尝试使用500k虚拟条目运行后,我的使用量超过了500MB。所以我只是问自己,如果我做错了或者我的情况,还有其他一些优化选项吗?
P.S:Ofc我调整了' hash-zipmap-max-entries'配置文件中的设置并使用它启动redis。