为什么有硬编码的块限制(压缩后 0.5 兆) 内存缓存?有人重新编译过它吗?我知道我不应该发送这样的大块,但这些额外的重块时不时地发生在我身上并造成严重破坏。

有帮助吗?

解决方案

这个问题曾经在 官方常见问题解答

我可能会遇到哪些 memcached 限制?(回溯机)

去引用:

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

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

最大密钥长度是多少?(250 字节)

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

为什么项目的大小限制为 1 MB?

啊,这是一个热门问题!

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

长答案:Memcached的内存存储引擎(将来会被插入/调整...),使用板法进行内存管理。内存分解成各种大小的板块,从最小数字开始,然后以阶乘为最大的值上升。

假设最小值为400个字节,最大值为1兆字节,阶乘为1.20:

板 1 - 400 字节 板 2 - 480 字节 板 3 - 576 字节 ...ETC。

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

还有其他原因让你不想这样做......如果我们谈论的是一个网页,并且您正在尝试存储/加载值这么大,那么您可能会做错问题。在这个尺寸下,加载并将数据结构解放到内存中需要大量的时间,并且您的网站可能表现不佳。

如果您确实想存储大于1MB的物品,则可以用编辑的重新编译 slabs.c:POWER_BLOCK 值,或使用效率低下的Malloc/Free后端。其他建议包括数据库,mogilefs等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top