2012-06-12 3 views
2

Из того, что я прочитал, вы не можете хранить значения или данные по 1 Мб за один раз с помощью memcached. Если это так, есть ли способ узнать размер массива перед отправкой его в memcached?PHP Как узнать размер массива для memcached

+0

Что вы подразумеваете под размером массива? – ajreal

+0

Я предполагаю, что op просто означает «размер массива» ... потому что в этом контексте размер файла не имеет смысла. – Wrikken

+0

какой уровень сжатия вы использовали? – ajreal

ответ

1

Memcache является магазином ключа/значения, и, следовательно, не делает " знать 'подробнее «комплекс» объектов. То, что делает модуль, является сериализацией значения &, которое представляет собой строку. Итак, общий размер = strlen(serialize($value)); Обратите внимание, что вы хотите non-overloaded version of strlen!

+0

Спасибо, Wrikken! Я никогда не знал о «перегрузке функций», что такое pro/con использовать перегруженные версии этих функций? – user1448020

+0

Перегруженные методы полезны для строк utf8. Дело в том, что он хранит каждого персонажа в 3 раза больше пространства, чем классический уровень. Просто попробуйте этот фрагмент: 'var_export (strlen ('ï'). '! ==' .mb_strlen ('ï'));'. Memcache не использует эти функции mb_ * для их использования, даст вам ложный результат;) – korko

-1

Или вы пытаетесь сложным путем strlen(serialize($array)); Или вы пытаетесь ростейшей

$before = memory_get_usage(); 
$myarray = array(<content>); 
$size = memory_get_usage() - $before; 

не мог думать ни о каком другом способе жаль

+0

И что произойдет, если GC происходит между вызовами 'memory_get_usage()'? – hafichuk

+0

Спасибо за подсказку korko, это полезный фрагмент, о котором нужно знать, но если memcached хранит данные как сериализованную строку, и учитывая, что memcached-сервер может находиться на внешней машине, я думаю, что strlen (serialize ($ array)); метод лучше для того, что я пытаюсь достичь. – user1448020

+0

hafichuk, что означает GC? – user1448020

0

Это не отвечает на ваш вопрос напрямую, однако при необходимости вы можете изменить предел 1 МБ на нечто большее.

См: http://linux.die.net/man/1/memcached

-I Override по умолчанию размер каждой страницы плиты. Значение по умолчанию - 1mb. Значение по умолчанию - 1 м, минимальное - 1 к, максимальное - 128 м. Регулировка этого значения изменяет лимит размера элемента. Остерегайтесь, что это также увеличивает количество плиток (используйте -v для просмотра) и использование избыточной памяти memcached.

Вы также можете включить сжатие, чтобы уменьшить размер значения. См.: http://ca.php.net/manual/en/memcache.setcompressthreshold.php

Смежные вопросы