2024年PHP开发者大会日本站

Memcache::connect

(PECL memcache >= 0.2.0)

Memcache::connect打开memcached服务器连接

描述

Memcache::connect(字符串 $host, 整数 $port = ?, 整数 $timeout = ?): 布尔值

Memcache::connect() 建立与memcached服务器的连接。使用Memcache::connect()打开的连接将在脚本执行结束时自动关闭。您也可以使用Memcache::close()关闭它。您也可以使用memcache_connect() 函数。

参数

host

指向memcached监听连接的主机。此参数也可以指定其他传输方式,例如unix:///path/to/memcached.sock来使用UNIX域套接字,在这种情况下,port也必须设置为0

port

指向memcached监听连接的端口。使用UNIX域套接字时,将此参数设置为0

请注意:如果未指定,port默认为memcache.default_port。因此,最好在此方法调用中显式指定端口。

timeout

用于连接到守护进程的秒数值。在更改默认值1秒之前请三思而后行——如果您的连接速度太慢,您可能会失去缓存的所有优势。

返回值

成功返回true,失败返回false

示例

示例 #1 Memcache::connect() 示例

<?php

/* 过程式API */

$memcache_obj = memcache_connect('memcache_host', 11211);

/* OO API */

$memcache = new Memcache;
$memcache->connect('memcache_host', 11211);

?>

备注

警告

当未指定port时,此方法默认为PHP ini指令memcache.default_port 的设置值。如果此值在应用程序的其他地方更改,则可能会导致意外结果:因此,最好始终在此方法调用中显式指定端口。

参见

添加备注

用户贡献的备注 2条备注

10
geoffrey dot hoffman at gmail dot com
14年前
如果memcached正在运行,调用memcache_connect()返回一个对象实例,而不是布尔值。如果memcached没有运行,调用memcache_connect()会抛出一个通知和一个警告(并返回预期的false)。

<?php
/* memcache 正在运行 */
$test1 = memcache_connect('127.0.0.1',11211);
echo
gettype($test1);
// object
echo get_class($test1);
// Memcache

/* memcached 已停止 */
$test2 = memcache_connect('127.0.0.1',11211);

/*
Notice: memcache_connect(): Server 127.0.0.1 (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.
(10060) in C:\Program Files\Support Tools\- on line 1

Warning: memcache_connect(): Can't connect to 127.0.0.1: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.
(10060) in C:\Program Files\Support Tools\- on line 1
*/

echo gettype($test2);
// boolean
echo $test2===false;
// 1
?>

似乎没有办法检查memcached是否正在运行,而不诉诸于错误抑制。

<?php
$test3
= @memcache_connect('127.0.0.1',11211);
if(
$test3===false ){
// memcached 可能没有运行
}
?>
-4
webysther at gmail dot com
10年前
在描述超时时,有一个说法并不完全正确,增加超时并不一定排除或无法实现memcache,它只允许系统等待更多并发连接,这只是连接数量的一小部分,这会导致几个问题,如果增加超时并进行一些测试,可以简单地纠正。
为了证明这个概念并表明如果服务器宕机,连接不会等待

<?PHP

while ( ++$loop < 10000 ) {
try {
$memcache = new Memcache;
@
$memcache->pconnect( "127.0.0.1" , 11211 , 30 );
$loopset = 0;
$loopget = 0;

while ( ++
$loopset < 50 ) {
if ( @
$memcache->set( "foo" , "bar" ) === false ) {
echo
"失败!" . PHP_EOL;
}
}

while ( ++
$loopget < 500 ) {
if ( @
$memcache->get( "foo" ) === false ) {
echo
"失败!" . PHP_EOL;
}
}

if (
$loop % 100 == 0 ) {
echo
"尝试: " . $loop . PHP_EOL;
}
} catch (
Exception $e ) {
echo
"失败: " . $e->getMessage() . PHP_EOL;
}
}

?>

使用无效主机并测试超时不会有任何区别!它仅用于连接到被占用的套接字。

有关在 memcached google code 中排查超时问题的更多详细信息。
To Top