为什么memcached中存在硬编码的块限制(压缩后的.5 meg)?有没有人重新编译过它们?我知道我不应该像这样发送大块的东西,但这些特别重的块不时发生在我身上并造成严重破坏.
这个问题曾经在官方FAQ中出现过
去引用:
您可能会在 memcache 中看到的简单限制是键和项目大小限制。键的长度限制为 250 个字符。存储的数据大小不能超过 1 兆字节,因为这是最大的典型板大小。”
常见问题解答现已修订,现在有两个单独的问题涉及此问题:
密钥的最大长度为 250 个字符。请注意,如果您使用客户端“前缀”或类似功能,则该值会较小,因为前缀被添加到原始密钥的前面。较短的密钥通常更好,因为它们可以节省内存并使用更少的带宽。
啊,这是一个热门问题!
简短的回答:因为内存分配器的算法是如何工作的。
长答案:Memcached 的内存存储引擎(将来将是可插拔/调整的......),使用平板方法进行内存管理。内存被分成不同大小的板块,从最小数量开始,按阶乘递增到最大可能值。
假设最小值为 400 字节,最大值为 1 兆字节,阶乘为 1.20:
板 1 - 400 字节 板 2 - 480 字节 板 3 - 576 字节 ... 等等。
板越大,它与前一块板之间的间隙就越大。因此最大值越大,内存存储的效率越低。Memcached 还必须为存在的每个板预先分配一些内存,因此设置较小的阶乘和较大的最大值将需要更多的开销。
您不想这样做还有其他原因......如果我们正在谈论一个网页,并且您试图存储/加载那么大的值,那么您可能做错了什么。在该大小下,将数据结构加载和解压到内存中将花费大量时间,并且您的站点可能不会很好地运行。
如果您确实想要存储大于 1MB 的项目,您可以使用编辑后的
slabs.c:POWER_BLOCK值重新编译 memcached,或使用低效的 malloc/free 后端。其他建议包括数据库、MogileFS 等。
| 归档时间: |
|
| 查看次数: |
1953 次 |
| 最近记录: |