2013-05-28 6 views
0

Следующий кодPHP Memcached строка размер превышает

$memcached = new Memcached(); 

$memcached->addServer('127.0.0.1', 11211); 

$data = json_encode(array(
     'string1' => md5(time()), 
     'string2' => md5(time()) 
)); 

var_dump($memcached->set('foo', $data, 300)); 

работает нормально

# telnet 127.0.0.1 11211 
# get foo 
VALUE foo 0 91 
{"string1":"884e036fd865cac1ef26b5f7a920c2c2","string2":"884e036fd865cac1ef26b5f7a920c2c2"} 

, но когда я добавляю третью линию

$data = json_encode(array(
     'string1' => md5(time()), 
     'string2' => md5(time()), 
     'string3' => md5(time()) 
)); 

var_dump($memcached->set('foo', $data, 300)); 

производит следующие

# get foo 
VALUE foo 16 63 
x«V*.)ÊÌK7T²RJ322J11KL6M4I4OM¶°H57·4716I5Oµ0NSÒ*6"E±11krW&z 

Я предполагаю, что memcached как-то сжимает значение, но почему он не возвращает его на get?

Любая идея, как ее решить?

+0

Как это решить? Вы пытались восстановить его в php? – zerkms

+0

Мне нужно иметь строку JSON в конце. В настоящее время это не JSON, как вы можете видеть. – Aley

+0

Вы пытались восстановить данные с помощью PHP? – Putr

ответ

2

Да потому, что cli и php используют различные варианты

Memcached::OPT_COMPRESSION is true by default 

From PHP DOC

Включает или отключает сжатие полезной нагрузки. Когда включено, значения элемента, превышающие определенный порог (в настоящее время 100 байт), будут сжиматься во время хранения и распаковываться при извлечении прозрачно.

Memcached::set

Значение может быть любым допустимым типом PHP за ресурсы, за исключением, потому что те не могут быть представлены в последовательной форме. Если включена опция Memcached :: OPT_COMPRESSION, сериализованное значение также будет сжато перед хранением.

Он сжимает данные после определенной длины ..., поэтому, когда вы пытаетесь получить данные из телнета вы не видите, что json но скорее compressed version

1

Согласно источникам: https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L2918 в сжатие может быть либо fastlz или zlib

Его значение определяется memcached.compression_type директивы конфигурации (https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L298)

http://www.php.net/manual/en/memcached.configuration.php#ini.memcached.compression-type

+0

Спасибо, zerkms! – Aley

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