Скрипт Python может извлекать значение из memcache, но PHP-скрипт получает пустой результат

#php #python #memcached

#php #python #memcached

Вопрос:

я запускаю скрипт Python, который кэширует некоторые данные

 self.cache.set('test', 'my sample data', 300)
data = self.cache.get('test')
self.p(data)
  

результатом этой программы будет вывод «моих образцов данных»… все хорошо, но когда я пытаюсь получить доступ к этому ключу из php

 $data = $this->cache->get('test');
print_r($test);
  

я получаю только пустой результат
итак, я проверяю статистику сервера

 $list = array();
$allSlabs = $this->cache->getExtendedStats('slabs');
$items = $this->cache->getExtendedStats('items');
foreach($allSlabs as $server => $slabs) {
    foreach($slabs AS $slabId => $slabMeta) {
        $cdump = $this->cache->getExtendedStats('cachedump',(int)$slabId);
            foreach($cdump AS $server => $entries) {
                if($entries) {
                foreach($entries AS $eName => $eData) {
                    $list[$eName] = array(
                        'key' => $eName,
                        'server' => $server,
                        'slabId' => $slabId,
                        'detail' => $eData,
                        'age' => $items[$server]['items'][$slabId]['age'],
                    );
                }
                }
            }
        }
    }
ksort($list);
print_r($list);
  

и этот ключ ‘test’ находится там … но я не могу получить к нему доступ

если я кэширую что-то в php, я получаю результат каждый раз, но почему-то этот python php-кэш не будет работать

если у кого-то есть идея, в чем может быть проблема, пожалуйста, дайте совет… я пробую все

Комментарии:

1. Не могли бы вы включить соответствующую выдержку из вывода фрагмента кода ‘проверить статистику сервера’?

Ответ №1:

Может ли быть так, что хэши не совпадают между PHP и Python? Решение здесь:http://www.ruturaj.net/python-php-memcache-hash

Добавьте следующее в свой скрипт Python, чтобы изменить способ вычисления хэшей…

 import memcache
import binascii
m = memcache.Client(['192.168.28.7:11211', '192.168.28.8:11211
', '192.168.28.9:11211'])

def php_hash(key):
    return (binascii.crc32(key) >> 16) amp; 0x7fff

for i in range(30):
       key = 'key'   str(i)
       a = m.get((php_hash(key), key))
       print i, a