Логика кеша cakePHP не работает

Моя проблема в том, что логика 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;

Я получил -

checkingfinished
Строгие стандарты: Нестатический метод 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);

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

Еще одна вещь, которая сбивает меня с толку - это 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

2 ответа

Решение

Ура! Я нашел решение!! Это начало работать после того, как я изменился 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 и когда я взял контрольный пункт, memcache начал работать, и позже я понял, что это было причиной.

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

telnet 127.0.0.1 11211

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

Другие вопросы по тегам