2013-03-30 3 views
2

В настоящее время у меня возникают проблемы с локальным развертыванием моего веб-сервиса api. Я использую memcached с расширением PHP Memcache. Вот следующее поведение;странное поведение memcache на локальном сервере apache

У меня есть функция входа, которая сначала проверяет, находится ли информация пользователя в памяти со следующим кодом;

$cache = Memcacher::get_instance()->load('user.' . $email); 
  • если кэш существует, то он будет возвращать переменную $cache быть true.
  • если кеш не существует, то я сохраняю его в памяти с помощью следующего кода;

    $cache = Memcacher::get_instance()->save('user.' . $login['value']['email'], $login);

параметр $login представляет собой ассоциативный массив, который содержит информацию о пользователе.

После сохранения в памяти, я пытаюсь повторно войти. Однако он не сохраняет информацию до того, как я сохраню сервер memcached 3-4 раза.

После 3-4 входа я успешно получаю информацию для входа из кеша.

Может ли кто-нибудь объяснить мне это странное поведение? Есть ли какая-либо memcached-конфигурация для предотвращения этого?

ПРИМЕЧАНИЯ: Я промывка памяти с перезапуск Memcached с sudo service memcached restart на Ubuntu

Примечания: Memcacher является пользовательским модуль, который использует set() и get() функции расширения PHP Memcache в

ПРИМЕЧАНИЕ: Вот исходный код от Memcacher

+0

Что такое «Memcacher», как .... ??? – Baba

+0

выглядит так: https://github.com/arascanakin/ariba/blob/master/library/memcache.class.php – aacanakin

+0

Каково значение 'Config :: get ('memcache_lifetime')' ??? – Baba

ответ

1

Вы объединяете массив со строкой. В точках может быть неверно, что $ login - это массив, поэтому вы начнете получать информацию, которую вы имеете, поскольку конкатенация будет работать. Но если это массив, вы не сможете сохранить ключ в memcache. Вы получите уведомление, которое, я думаю, вы игнорируете.

+0

Я написал это неправильно здесь, это должно быть '$ login ['value'] ['email']'. Позвольте мне изменить. Извините за это – aacanakin

+1

Возможно, вы захотите принять во внимание проверку на наличие ошибок. Одна вещь, которую вы, безусловно, должны сделать, это вернуть результат Memcache :: set(), который фактически возвращает true для успеха и false для отказа. Я работаю с memcache уже более 1-2 лет, у меня не было проблем. это означает, что проблема не выражена в вашем примере, или некоторые значения не совпадают. – Xnoise

+0

Благодарим вас за ответ. Вы рекомендуете расширение Memcache или Memcached PHP? – aacanakin

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