为什么memcached中存在硬编码的块限制(压缩后的.5 meg)? 有没有人重新编译过它们? 我知道我不应该像这样发送大块的东西,但这些特别重的块不时发生在我身上并造成严重破坏。

===============>>#1 票数:4 已采纳

这个问题过去常见官方FAQ

我可能遇到的memcached有哪些限制? (Wayback Machine)

报价:

使用memcache可能会看到的简单限制是关键和项目大小限制。 密钥限制为250个字符。 存储的数据大小不能超过1兆字节,因为这是最大的典型平板尺寸。“

常见问题解答已经修订,现在有两个单独的问题涉及:

什么是最大密钥长度? (250字节)

密钥的最大大小为250个字符。 请注意,如果您使用客户端“前缀”或类似功能,则此值将更少,因为前缀被添加到原始密钥的前面。 较短的键通常更好,因为它们节省了内存并使用更少的带宽。

为什么物品的尺寸限制在1兆?

啊,这是一个很受欢迎的问题!

简短回答:因为内存分配器的算法如何工作。

答案很长:Memcached的内存存储引擎(将来可插拔/调整......)使用slab方法进行内存管理。 存储器被分解成不同大小的块状块,从最小数量开始并以阶乘方式上升到最大可能值。

假设最小值为400字节,最大值为1兆字节,因子为1.20:

slab 1 - 400 bytes slab 2 - 480 bytes bytes slab 3 - 576 bytes ...等

板坯越大,它与前一块板坯之间的间隙就越大。 因此,最大值越大,存储器存储的效率越低。 Memcached还必须为每个存在的slab预分配一些内存,因此设置一个具有更大max值的较小阶乘将需要更多的开销。

还有其他原因你不想这样做......如果我们谈论的是一个网页而你试图存储/加载大的值,你可能做错了。 在这个大小的情况下,将数据结构加载和解压缩到内存中需要花费相当多的时间,并且您的站点可能无法很好地执行。

如果您确实想要存储大于1MB的项目,可以使用已编辑的slabs.c:POWER_BLOCK值重新编译memcached,或使用低效的malloc / free后端。 其他建议包括数据库,MogileFS等。

  ask by deadprogrammer translate from so

未解决问题?本站智能推荐: