15.5.5.4: Каков максимальный размер объекта, который вы можете сохранить в memcache, и настраивается ли он?
Максимальный размер объекта по умолчанию составляет 1 МБ. В memcached 1.4.2 и более поздних версиях вы можете изменить максимальный размер объекта, используя опцию командной строки -I.
Для версий до этого, чтобы увеличить этот размер, вы должны перекомпилировать memcached. Вы можете изменить значение POWER_BLOCK в файле slabs.c внутри источника.
В memcached 1.4.2 и выше вы можете настроить максимальный поддерживаемый размер объекта, используя опцию командной строки -I. Например, чтобы увеличить максимальный размер объекта до 5 МБ:
$ memcached -I 5m
Однако даже при увеличении памяти это вряд ли удачный выбор для ИМО. Лучше было бы разбить объект на более мелкие части, а затем кэшировать его отдельные части.
Краткий ответ: из-за того, как работает алгоритм распределителя памяти.
Длинный ответ: механизм хранения памяти Memcached (который будет подключен / скорректирован в будущем ...), использует подход slabs к управлению памятью. Память разбита на куски слябов разных размеров, начиная с минимального числа и повышаясь от факториала до максимально возможного значения.
Допустим, минимальное значение составляет 400 байтов, максимальное значение составляет 1 мегабайт, а факториал равен 1,20:
плита 1 - 400 байт плита 2 - 480 байт плита 3 - 576 байт ... и т. Д.
Чем больше плита, тем больше зазор между ней и предыдущей плитой. Таким образом, чем больше максимальное значение, тем менее эффективно хранилище памяти. Memcached также должен предварительно выделить некоторое количество памяти для каждой существующей плиты, поэтому установка меньшего факториала с большим максимальным значением потребует еще больше накладных расходов.
Есть и другая причина, по которой вы не хотите этого делать ... Если мы говорим о веб-странице и пытаемся сохранить / загрузить такие большие значения, вы, вероятно, делаете что-то не так. При таком размере загрузка и распаковка структуры данных в память займет заметное количество времени, и ваш сайт, вероятно, будет работать не очень хорошо.
Если вы действительно хотите хранить элементы размером более 1 МБ, вы можете перекомпилировать memcached с отредактированным значением slabs.c: POWER_BLOCK или использовать неэффективный malloc / free backend. Другие предложения включают базу данных, MogileFS и т. Д.