sorting - 优化redis排序集内存使用

标签 sorting database-design memory-management redis sortedset

我目前在 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/

相关文章:

python - Python 列表(元组)中每个元素有多少字节?

c - 通过复制返回一个结构,它封装了一个指针

c++ - 对具有许多缓存未命中的 1000-2000 个元素进行排序

c++ - 创建一个比较函数来对 C 风格的字符串进行排序

algorithm - 排序数据结构 : random in, 最低出

sql - 我们如何实现 IS-A 关系?

mysql - 我可以将一个产品的多个附加组件存储为 JSON 形式的表列中吗?

SQL:如何以某种任意方式对查询结果进行排序/排序?

mysql - MySQL中的复合主键问题

java - 重新实现 "ToneMatrix"音频玩具