为什么在memcached中存在硬编码的块限制(压缩后的.5 meg)?有没有人重新编译过它们?我知道我不应该像这样发送大块的东西,但这些特别重的块不时发生在我身上并造成严重破坏。
答案 0 :(得分:4)
此问题曾出现在official FAQ
中What are some limits in memcached I might hit? (Wayback Machine)
引用:
使用memcache可能会看到的简单限制是关键和 项目大小限制。密钥限制为250个字符。存储数据 不能超过1兆字节,因为这是最大的典型 板坯尺寸。“
常见问题解答已经修订,现在有两个单独的问题涉及:
What is the maxiumum key length? (250 bytes)
密钥的最大大小为250个字符。注意这个值是 如果你使用客户端“前缀”或类似的功能,因为 前缀被固定在原始键的前面。更短的钥匙是 通常更好,因为它们节省了内存并使用更少的带宽。
Why are items limited to 1 megabyte in size?
啊,这是一个很受欢迎的问题!
简短回答:由于内存分配器的算法如何工作。
答案很长:Memcached的内存存储引擎(将会是 可插拔/未来调整...),使用平板方法记忆 管理。内存被分解成不同大小的平板块, 从最小数字开始,然后通过因子上升到 最大可能值。
假设最小值为400字节,最大值为1 兆字节,因子是1.20:
slab 1 - 400字节slab 2 - 480字节slab 3 - 576 bytes ... etc。
板坯越大,它与板坯之间的间隙就越大 以前的板坯。所以最大值越大,效率越低 内存存储是。 Memcached还必须预先分配一些内存 存在的每一块板,因此设置较小的因子 最大值将需要更多的开销。
还有其他原因你不想这样做......如果我们这样做的话 谈论一个网页,你正在尝试存储/加载值 那么大,你可能做错了什么。那么大小 花费大量时间来加载和解压缩数据结构 进入记忆库,你的网站可能效果不佳。
如果你真的想存储大于1MB的物品,你可以 使用已编辑的
slabs.c:POWER_BLOCK
值重新编译memcached,或使用 低效的malloc /免费后端。其他建议包括a 数据库,MogileFS等