Моя проблема в том, что логика 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
... и аналогичных строгих стандартных уведомлений дляCache :: getInstance () и т. Д.
Но обратите внимание, что уведомления появляются после "checkfinished", поэтому я запутался, если это действительно актуально.
Я попробовал команду -
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";
в код и получил такой результат в своей системе -
Что я интерпретирую из этих данных?В разделе Время начала я получаю предупреждение - 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