Обмен Memcache с PHP и Python

Я пытаюсь разделить ключ Memcache между Python и PHP. Python записывает ключ, и PHP читает его. Я использую Cakephp framework, с php-pecl-memcache (а не php-pecl-memcached) и python-memcache всю библиотеку python.

Python:

mc = memcache.Client( ["127.0.0.1:11211"]) key = "key1" value = 1323779849 mc.set(key, value) 

PHP:

  echo Cache::read('key1', 'memcached'); 

PHP не может прочитать переменную, я получаю странные «MemcachePool :: get () [http://php.net/memcachepool.get]: не удалось разгрузить данные»; Я подозреваю, что это связано с флагами memcached, которые установлены по-разному в каждой библиотеке.

Это то, что происходит, когда я telnet для memcached:

Python устанавливает ключ:

  get key1 VALUE key1 1 12 1323779849 . END 

PHP устанавливает ключ:

  get key1 VALUE key 1 0 12 1323779849 END 
  • Есть ли способ переопределить эти флаги и просто «сделать свое дело»?
  • Существуют ли библиотеки php / python memcache, которые лучше сочетаются друг с другом?
  • Альтернативно, есть ли простой способ создать общее пространство памяти между python / php?

Наконец он получил его на работу. Лот не работал должным образом.

  1. Одна из проблем заключается в том, что php и python используют разные флаги для выполнения разных действий. Не проблема в решении all-python или all-php, но для взаимодействия между средами – настоящая проблема. Полезным ресурсом является http://www.hjp.at/zettel/m/memcached_flags.rxml , который показывает, что флаги python-memcache длиннее целое как «2», которые php-memcache не понимает, следовательно, ошибка сжатия . Я изменил python-memcache, чтобы включить «флаг-переопределение» в функции set. Эта переменная просто заставляет конкретный флаг независимо от того, что, по его мнению, считает memcache python. Это позволило мне переопределить Int от 2 до 0. Я буду проверять ветвь текущей версии python-memcache и отправить ее в Github. Это позволило мне форсировать длинный флагом (2) python на то, что php понял бы (0).

  2. CakePhp до 1.3.3 сохраняет все ключи в memcached с дополнительным ключом key_expires, помеченным как 768 и т. Д. И т. Д. Без этого дополнительного ключа он не может найти ключ, который вы ищете. К счастью, это поведение было сбрасыто в более поздней версии Cakephp (я просто обновился до 1.3.13), и теперь он работает хорошо.

Когда вы кладете что-то через python memcached, это, вероятно, маринованное. Поэтому PHP не может ее разблокировать. Я бы попытался использовать какой-то очень простой тип, возможно, ctypes? Может быть, сырые строки?