为什么一个500MB的Redis dump.rdb文件大约需要5.0GB的内存?(Why a 500

2019-08-02 08:38发布

其实,我有3种Redis的情况下,我把它们放在一起进入这个500MB + dump.rdb。 Redis的服务器可以读取这个dump.rdb,似乎一切正常。 然后,我注意到,Redis的服务器成本超过5.0GB的内存。 我不知道为什么。

这有什么错我的档案? 我的数据库拥有300万键,每个键的值是一个列表包含大约80的整数。

我用这个方法把3实例在一起。

PS:具有相同的大小和相同的键值结构成本只有1GB存储器另一个dump.rdb。

而我的数据看起来像KEYNUM - > {NUM1,NUM2,NUM3,......}。 所有的数字是1万和400万之间。 所以,我应该用列表来存储呢? 现在,我用LPUSH(K,V)。 难道这种方式成本太高?

Answer 1:

的存储器转储尺寸的比率依赖于数据类型的Redis内部使用。

对于小物体(散列,列表和sortedsets),redis的使用ziplists对数据进行编码。 对于由整数的小套,Redis的使用Intsets。 ZipLists和IntSets被存储在磁盘上相同的格式,因为它们是存储在内存中 。 所以,你会期望一个1:如果你的数据使用这些编码1的比例。

对于较大的对象,则在内存中的表示是从所述磁盘上表示完全不同。 磁盘上的格式压缩,没有指针,没有处理内存碎片。 所以,如果你的对象是大,一个10:1的内存磁盘比是正常的和预期。

如果你想知道哪些对象吃内存,使用Redis的-RDB的工具来分析你的数据。 从那里,按照上redis.io内存优化的笔记 ,还有对Redis的-RDB工具内存优化维基条目 。



Answer 2:

可能有更多的它,但我相信Redis的压缩转储文件。



文章来源: Why a 500MB Redis dump.rdb file takes about 5.0GB memory?
标签: redis