phpday 2025 - Call For Papers

Memcache::connect

(PECL memcache >= 0.2.0)

Memcache::connect打开一个memcached服务端连接

说明

Memcache::connect(string $host, int $port = ?, int $timeout = ?): bool

Memcache::connect()建立一个到memcached服务端的连接。 使用方法 Memcache::connect()打开的连接在脚本执行结束后会自动关闭。当然,你也可以使用方法 Memcache::close()来主动关闭。 同时你也可以使用memcache_connect()函数来获取一个连接。

参数

host

memcached服务端监听主机地址。这个参数也可以指定为其他传输方式比如unix:///path/to/memcached.sock 来使用Unix域socket,在这种方式下,port参数必须设置为0

port

memcached服务端监听端口。当使用Unix域socket的时候要设置此参数为0

注意:如果未指定 port,默认为 memcache.default_port。因此,明智的做法是调用此方法时明确指定端口。

timeout

连接持续(超时)时间,单位秒。默认值1秒,修改此值之前请三思,过长的连接持续时间可能会导致失去所有的缓存优势。

返回值

成功时返回 true, 或者在失败时返回 false

示例

示例 #1 Memcache::connect() example

<?php

/* procedural 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 notes

up
10
geoffrey dot hoffman at gmail dot com
14 years ago
If memcached is working, calling memcache_connect( ) returns an Object instance, not a boolean. If memcached is not working, calling memcache_connect( ) throws a notice AND a warning (and returns false as expected).

<?php
/* memcache is running */
$test1 = memcache_connect('127.0.0.1',11211);
echo
gettype($test1);
// object
echo get_class($test1);
// Memcache

/* memcached is stopped */
$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
?>

There appears to be no way to check whether memcached is actually running without resorting to error suppression:

<?php
$test3
= @memcache_connect('127.0.0.1',11211);
if(
$test3===false ){
// memcached is _probably_ not running
}
?>
up
-4
webysther at gmail dot com
10 years ago
In describing the timeout there is a statement that is not completely correct, increase the timeout does not necessarily preclude or unfeasible memcache, only allows the system to wait for more concurrent connections, which is a large minority of the number of connections, this causes several problems and could simply be corrected if the timeout was increased and perform some tests.
To prove the concept and show that the connection does not wait if the server goes down:

<?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
"Fail!" . PHP_EOL;
}
}

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

if (
$loop % 100 == 0 ) {
echo
"Try: " . $loop . PHP_EOL;
}
} catch (
Exception $e ) {
echo
"Fail: " . $e->getMessage() . PHP_EOL;
}
}

?>

Replace with an invalid host and test the timeout will not make a difference! It serves only for connections to the socket that are occupied.

More detail about troubleshooting timeouts in memcached google code.
To Top