我目前在 Redis 中有 22k 个排序集。每个键的格式如下:
monitor:<type>:feed:<MongoId>
那些已排序的集合共有 11895225 个项目。这些集合有一个 unix 时间戳作为分数和一个 MongoId 作为成员。
<timestamp> - <MongoId>
安装速度极快,但数据库大小为 1.8g。我可以做任何优化来减少内存使用吗(请记住,我需要按时间对数据进行排序)?
最佳答案
您可以进行一些优化,但不要期望太多。每个成员在数据本身之上有大约 64 字节的开销(成员键 + 分数/ float )。
因此最小内存大小(不含数据)已经在 0.77GB 左右。
请参阅 Didier Spazia 的这个好答案:Redis 10x more memory usage than data
要进行优化,您可以使用客户端散列和/或客户端压缩。
关于您的数据设计:
The sets have a unix timestamp as the key and a MongoId as a value.
不太清楚你的意思。 key
是整个排序集的正确术语。您的成员(member)分数是多少,您的成员(member)字符串是什么?你靠分数排序吗?而且,还有按字符串的字典顺序排序?如果两者兼而有之:除了可能缩短字符串中的字符串/标记外,您无能为力。您可以将其与使用 MsgPack 格式的数据序列化相结合。如果字符串中有数字,这很有用,当序列化为 MsgPack 时使用的字节少得多。如果您使用数组(而不是序列化的字典),您可以再次节省一些空间。使用整数/ float 时,请确保您的字节顺序与所需的排序匹配,当您在成员字符串中使用 MsgPack 并且您需要排序集的字典顺序排序特征时。
希望这有帮助,TW
关于sorting - 优化redis排序集内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965766/