Логика CakePHP memcache не работает


Моя проблема в том, что логика memcache в моем приложении CakePHP не работает в моей локальной системе с тех пор, как я установил ее здесь, взяв код из существующей настройки товарищей по команде. Я проверил, что служба Memcached запущена в моей системе, и phpinfo() показывает, что раздел memcache включен.

Но подобные вещи не работают -

$this->Memcache->set($key,$value);

CakePHP использует свою оболочку для Memcache, v.0.3.

Если я отлажу вот так -

echo "<pre>";
echo "checking";
error_reporting(-1); 
$this->Memcache->set($key,$countryNetworkWiseReportData,3600);
echo "finished";
exit;

Я получаю -

Проверка завершена
Строгие стандарты: Нестатический метод Cache::write() не должен вызываться статически, предполагая, что $this из несовместимого контекста в D:\cake1.2\cake\libs\configure.php на линии 690

... и аналогичные строгие стандартные уведомления для кэша::getInstance() и т.д.

Но обратите внимание, что уведомления появляются после "проверка завершена", поэтому я в замешательстве, если это действительно актуально.

Я попробовал выполнить команду -

telnet 127.0.0.1:11211

Что дает -

Connecting To 127.0.0.1:11211...Could not open connection to the host, on port 23: Connect failed

Также пытался -

telnet localhost:11211 (in case firewall issues prevent connection to 127.0.0.1)

Но получил ту же ошибку.

Я также попробовал этот скрипт под названием memcache.php . Я ввел $arr= "127.0.0.1:11211"; в код и получил этот результат в своей системе -

enter image description here

Что я интерпретирую из этих данных? Я получаю предупреждение в разделе Время начала - Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the ....

До сих пор мне кажется, что подключение к порту по умолчанию 11211 по какой-то причине не разрешено в моем CakePHP код проекта. Но опять же, как тогда memcache.php способен подключаться к серверу memcache и отображать эти данные.

Более Подробная Информация

Благодаря Тюдору Константину, выполнение telnet 127.0.0.1 11211 больше не выдает никаких ошибок, показывает пустой экран... что, я думаю, прекрасно.

Я проверил далее в коде, у нас есть модельные функции, которые имеют такую логику -

if(!$this->memcacheCommon())
{
    $this->log('Error in memcache', LOG_DEBUG);
    die('Error in memcache');
}

//like in others system, in my system too, it passes above condition

$memcachedata = $this->Memcache->get($key);
//does not return data in my system, because $this->Memcache->set($key,$data); never sets the data correctly.

if(got data from memcache)
{
    //Return that data
}
else
{
    //Get data from database
    $this->Memcache->set($key,$data); //does not the data in my setup - set() function returns false
}

Итак, я вошел в функцию set() класса CakeMemcache(), и там есть это строка в конце

return @$this->_Memcache_cluster_new->set($key, $var, 0, time()+$expires);

Это возвращает false, и я не знаю, что здесь отлаживать.

Еще одна вещь, которая меня смущает, - это memcacheCommon() внутри app_model.php имеет эти строки –

$this->Memcache = new CakeMemcache();
$this->Memcache->_connect();

И внутри CakeMemcache()->_connect() есть следующие строки –

$this->_Memcache_standalone =& new Memcache();
$this->_Memcache_cluster_new =& new Memcache();

Я не уверен, что именно они делают.

Буду признателен за любые указания... спасибо

Более Подробная Информация

Я каким-то образом потерял предыдущее memcache.php файл, с помощью которого я получил вышеприведенное графическое отображение использования memcache (опубликовал изображение результата, который я получил, выше). Позже я скачал memcache-3.0.6 из http://pecl.php.net/package/memcache/3.0.6 и попытался запустить example.php и memcache.php файлы, которые присутствуют внутри архива.

Во-первых, запуск example.php выдает мне следующую ошибку -

Notice: memcache_connect(): Server localhost (tcp 11211) failed with: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Warning: memcache_connect(): Can't connect to localhost:11211, A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Connection to memcached failed

Я проверил, что служба memcached запущена (в списке служб Windows). Также telnet localhost 11211 не выдает никаких ошибок и показывает пустое командное окно.

Во-вторых, запуск memcache.php и ввод учетных данных дает мне следующее, щелкнув по всем вкладкам (Обновить данные, Просмотреть статистику хоста, переменные) -

Notice: Use of undefined constant values - assumed 'values' in path\to\file\memcache.php on line 57
Cant connect to:v:a

Строка 57 была -

function get_host_port_from_server($server){
    $values = explode(':', $server);
    if (($values[0] == 'unix') && (!is_numeric( $values[1]))) {
        return array($server, 0);
    }
    else {
        return values;   //line 57
    }
}

Как получилось, что это были значения, я скачал его с http://pecl.php.net/package/memcache/3.0.6 . После того, как я изменил его на return $values; У меня есть ->

Cant connect to:mymemcache-server1:11211

. Я точно не помню, как ранее мне удалось получить этот график сервера memcache (я опубликовал рисунок выше).

В-третьих, в командной строке, после подключения через telnet, команда stats дает следующее -

STAT pid 1584
STAT uptime 2856
STAT time 1315981346
STAT version 1.2.1
STAT pointer_size 32
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 1
STAT total_connections 3
STAT connection_structures 2
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
END
Author: Sandeepan Nath, 2011-08-12

2 answers

Как я вижу, вы находитесь на компьютере с Windows, поэтому команда telnet такова:

telnet 127.0.0.1 11211

Обратите внимание на пробел вместо двоеточие . Это может помочь вам отладить соединение memcache

 2
Author: Tudor Constantin, 2011-09-07 09:03:59

Ура! Я нашел решение!! Он начал работать после того, как я изменил localhost на 127.0.0.1 в файле /app/config/fcore.php.

Внесены следующие изменения -

# Memcache server constants
define('MEMCACHE_SERVER', 'localhost:11211');
define('MEMCACHE_SERVER_CLUSTER', 'localhost:11211');
define('MEMCACHE_SERVER_CLUSTER_NEW', 'localhost:11211');

До

# Memcache server constants
define('MEMCACHE_SERVER', '127.0.0.1:11211');
define('MEMCACHE_SERVER_CLUSTER', '127.0.0.1:11211');
define('MEMCACHE_SERVER_CLUSTER_NEW', '127.0.0.1:11211');

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

К счастью, наша команда настроила новый репозиторий для проекта с 127.0.0.1 вместо localhost, и когда я взял checkout, memcache начал работать, и позже я понял, что это было причиной.

 0
Author: Sandeepan Nath, 2012-04-22 08:18:47