redis中的内存分配

时间:2012-10-11 17:17:05

标签: redis

在浏览了Redis的一些代码后,我注意到“robj”的创建是通过调用“createObject”函数完成的,该函数又调用“malloc”来分配内存。因此,每当请求到来时(例如,SET uid 1234),将存在内存分配过程。

我的问题是,为什么不预先分配空间以减少内存分配成本?因为物体尺寸不同?

1 个答案:

答案 0 :(得分:6)

  
    

我的问题是,为什么不预先分配空间以减少内存分配成本?因为物体尺寸不同?

  

您描述的是内存分配器的工作。在Redis中构建这种逻辑并非易事。

默认情况下,Redis在Linux上使用jemalloc内存分配器。

Jemalloc有几项优化可以减少内存分配开销。阅读以下链接,了解jemalloc如何帮助 -

  1. Facebook Engineering blog on Jemalloc
  2. Jemalloc Paper from 2006
  3. 当Redis推出Jemalloc时,许多内存管理问题都消失了。以下是关于介绍jemalloc的antirez (author of redis) had to say

      

    [snip]分配器是一件很严肃的事情。自从我们专门介绍了   编码数据类型Redis开始遭受碎片化。我们   尝试了不同的东西来解决问题,但基本上是Linux   glibc中的默认分配器真的很糟糕。

         

    在Redis中包含jemalloc是一个巨大的胜利。现实世界中每一个碎片都是如此   通过此更改以及使用的内存量来修复系统   有点下降。

    P.S。您可能会在redis-db邮件列表上获得更好,更明智的答案