我的问题是我的cakePHP应用程序中的memcache逻辑在我的本地系统上没有工作,因为我在这里设置它,通过从现有的队友设置中获取代码。我已经检查过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(),假设$ 6来自第690行的D:\ cake1.2 \ cake \ libs \ configure.php中的不兼容上下文...以及类似的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
}
所以,我进入了CakeMemcache()类的set()函数,最后有这一行
return @$this->_Memcache_cluster_new->set($key, $var, 0, time()+$expires);
这会返回false,我不知道从这里调试什么。
令我困惑的另一件事是app_model.php中的memcacheCommon()有这些行 -
$this->Memcache = new CakeMemcache();
$this->Memcache->_connect();
在CakeMemcache() - &gt; _connect()中,有这些行 -
$this->_Memcache_standalone =& new Memcache();
$this->_Memcache_cluster_new =& new Memcache();
我不确定他们到底做了什么。
非常感谢任何指示......谢谢
更多详情
我已经以某种方式丢失了早期的memcache.php文件,使用它我得到了上面的图形内存缓存使用显示(已经发布了我上面得到的输出图片)。我后来从http://pecl.php.net/package/memcache/3.0.6下载了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;
后,我得到了 - &gt;
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
答案 0 :(得分:2)
我可以看到,你在Windows机器上,所以telnet命令是:
telnet 127.0.0.1 11211
注意空间而不是冒号。这可能有助于您调试memcache连接
答案 1 :(得分:0)
耶!我找到了解决方案!!我在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开始工作,后来我意识到这就是原因。