У нас есть приложение, в котором мы используем python для хранения большого количества данных в memcached. Мы используем pylibmc в python, а на стороне php мы используем библиотеку php-memcached. В качестве резюме
- pylibmc v.1.2.3
- php-memcached v.2.0.1
- libmemcached v1.0.8.
Все остальное в порядке, кроме случаев, когда в игру вступает компрессия. Вот как данные сжимаются в python
import pylibmc
mem = pylibmc.Client(['10.90.15.104:11211'], binary=True)
mem.set('foo','this is a rather long string. this is a rather '+
'long string. this is a rather long string. this is a rather' +
'long string. this is a rather long string', 0, 10)
проверяя в телнете видим какое-то искаженное значение, значит оно было сжато. Теперь читаем его в php.
$memd = new Memcached();
$memd->addServer('10.90.15.104', 11211);
echo $memd->get('foo');
Когда выше запускается, мы получаем такое же искаженное значение, что означает, что оно не распаковывается. pylibmc использует zlib, поэтому я также изменил тип сжатия php на zlib. Какие еще настройки нужно сделать? Пожалуйста помоги.
Для дальнейшего ознакомления здесь приведены выходные данные memcached после установки строки в python pylibmc.
get foo
VALUE foo 8 40
x+��,V�D��Ē��"����t�⒢̼t=���g\5#
END
А вот вывод memcached для строки, сохраненной с помощью memcached-клиента PHP:
get foo
VALUE foo 48 44
�x�+��,V�D��Ē��"����t�⒢̼t=���g\5#
END
Как видите, в этом есть что-то подозрительное. Сжатый размер в pylibmc составляет 40 байт, а те же данные, сжатые с использованием php-memcached, составляют 44 байта. Также обратите внимание на флаги 8 при сохранении с использованием pylibmc и 48 при сохранении с использованием php-memcached!