PHP操作Memcached
一、PHP连接Memcached:
一个简单的使用示例:
$memcache = new Memcache;
$memcache->connect("127.0.0.1",11211) or die("Memcached connected failed");
echo "Memcached's version: " . $memcache->getVersion() . "<br />";
$data = array(
'url' => "http://www.cnblogs.com/wujuntian/",
'name' => "编程人,在天涯"
);
$memcache -> set("info",$data,0,10);
$info = $memcache->get("info");
echo '<pre>';
print_r($info);
PHP操作Memcached的方法有面向过程的也有面向对象的,下面主要介绍面向对象的方法,面向过程的方法的使用是类似的,而且这些方法大多数跟Memcached的命令是一一对应的。
二、Memcache类:
1. bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )
功能:建立一个到memcached服务端的连接。
参数:
host:memcached服务端监听主机地址。这个参数也可以指定为其他传输方式比如
unix:///path/to/memcached.sock 来使用Unix或socket,在这种方式下,port参数必
须设置为0。
port:memcached服务端监听端口。当使用Unix域socket的时候要设置此参数为0。
timeout:连接持续(超时)时间,单位秒。默认值1秒,修改此值之前请三思,过长的连
接持续时间可能会导致失去所有的缓存优势。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
备注:
使用方法 Memcache::connect()打开的连接在脚本执行结束后会自动关闭。当然,你也可以使用方法 Memcache::close()来主动关闭。 同时你也可以使用memcache_connect()函数来获取一个连接。
2. mixed Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )
功能:打开一个到服务器的持久化连接。
参数:参照Memcache::connect()方法。
返回值:返回一个 Memcache 对象 或者在失败时返回 FALSE。
备注:
Memcache::pconnect()和 Memcache::connect()非常类似,不同点在于这里建立的连接是持久化的。 这个连接不会在脚本执行结束后或者Memcache::close()被调用后关闭。 同样你也可以使用函数memcache_pconnect()。
3. bool Memcache::close ( void )
功能:关闭到memcached服务端的连接。
参数:无。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
备注:
这个函数不会关闭持久化连接, 持久化连接仅仅会在web服务器关机/重启时关闭。与之对应的,你也可以使用memcache_close()函数。
4. bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )
功能:向key存储一个元素值为 var。参数expire是以秒为单位的失效时间, 如果设置为0
表明该元素永不过期(但是它可能会因为为了给其他项分配空间而被删除)。如果你希
望存储的元素 经过压缩(使用zlib),你可以设置flag的值为MEMCACHE_COMPRESSED。
参数:
key: 要设置值的key。
var: 要存储的值,字符串和数值直接存储,其他类型序列化后存储。
flag: 使用MEMCACHE_COMPRESSED指定对值进行压缩(使用zlib)。
expire:当前写入缓存的数据的失效时间。如果此值设置为0表明此数据永不过期。你可以
设置一个UNIX时间戳或 以秒为单位的整数(从当前算起的时间差)来说明此数据
的过期时间,但是在后一种设置方式中,不能超过 2592000秒(30天)。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
备注:
资源类型变量(比如文件或连接)不能被存储在缓存中,因为它们在序列化状态不能被完整描述。同样你也可以使用函数memcache_set()。
5. bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )
功能:增加一个条目到缓存服务器。
参数:参照Memcache::set()方法。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。 如果这个key已经存在返回FALSE。
备注:
Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器。若key已存在则返回false。同样可以使用函数memcache_add()。
6. bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] )
功能:替换已经存在的元素的值。
参数:参照Memcache::set()方法。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
备注:
Memcache::replace()通过key来查找元素并替换其值。当key 对应的元素不存在时,Memcache::replace()返回FALSE。同样你也可以使用函数memcache_replace()。
7. string Memcache::get ( string $key [, int &$flags ] )
array Memcache::get ( array $keys [, array &$flags ] )
功能:如果服务端之前有以key作为key存储的元素,Memcache::get()方法此时返回之前存
储的值。你可以给Memcache::get()方法传递一个数组(多个key)来获取一个数组的
元素值返回的数组仅仅包含从 服务端查找到的key-value对。
参数:
key: 要获取值的key或key数组。
flags:如果给定这个参数(以引用方式传递),该参数会被写入一些key对应的信息。这些
标记和Memcache::set()方法中的同名参数 意义相同。用int值的低位保留了
pecl/memcache的内部用法(比如:用来说明压缩和序列化状态)。(译注:最后一位
表明是否序列化,倒数第二位表明是否经过压缩, 比如:如果此值为1表示经过序列
化,但未经过压缩,2表明压缩而未序列化,3表明压缩并且序列化,0表明未经过压
缩和序列化,具体算法可查找linux文件权限算法相关资料)
返回值:返回key对应的存储元素的字符串值或者在失败或key未找到的时候返回FALSE。
8. bool Memcache::delete ( string $key [, int $timeout = 0 ] )
功能:通过key删除一个元素。 如果参数timeout指定,该元素会在timeout秒后失效。 同
样也可以使用memcache_delete()函数完成同样功能。
参数:
key: 要删除的元素的key。
timeout:删除该元素的执行时间。如果值为0,则该元素立即删除,如果值为30,元素会在30
秒内被删除。
返回值:成功时返回 TRUE,或者在失败时返回 FALSE。
9. bool Memcache::flush ( void )
功能:清洗(删除)已经存储的所有的元素。
参数:无。
返回值:成功时返回 TRUE,或者在失败时返回 FALSE。
备注:
Memcache::flush()立即使所有已经存在的元素失效。方法Memcache::flush() 并不会真正的释放任何资源,而是仅仅标记所有元素都失效了,因此已经被使用的内存会被新的元素复写。 同样你也可以使用函数memcache_flush()完成相同功能。
10. int Memcache::increment ( string $key [, int $value = 1 ] )
功能:将指定元素的值增加value。如果指定的key 对应的元素不是数值类型并且不能被转
换为数值, 会将此值修改为value. Memcache::increment() 不会在key对应元素不存
在时创建元素。
参数:
key: 将要增加值的元素的key。
value:参数value表明要将指定元素值增加多少。
返回值:成功时返回新的元素值 或者在失败时返回 FALSE。
备注:
不要在经过压缩存储的元素上使用Memcache::increment(),因为这样作会导致后续对Memcache::get()的调用失败。
11. int Memcache::decrement ( string $key [, int $value = 1 ] )
功能:将指定元素的值减小value。
参数:参照Memcache::increment()方法。
返回值:成功的时候返回元素的新值 或者在失败时返回 FALSE。
备注:
新的元素的值不会小于0。
不要将Memcache::decrement()方法用于压缩存储的元素,那样作会导致 Memcache::get()方法获取值会失败。
12. string Memcache::getVersion ( void )
功能:返回一个字符串表示的服务端版本号。 同样你也可以使用函数
memcache_get_version()。
参数:无。
返回值:返回服务端版本号或者在失败时返回FALSE。
13. int Memcache::getServerStatus ( string $host [, int $port = 11211 ] )
功能:返回一个服务器的在线/离线状态,你也同样可以使用 函数
memcache_get_server_status()。
参数:
host: 主机监听地址。
port: 主机监听端口,默认11211。
返回值:返回一个服务器的状态,0表示服务器离线,非0表示在线。
14. array Memcache::getStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )
功能:返回一个关联数组的服务器统计信息。数组key是统计信息名, 值就是统计信息的
值。同样你可以使用函数memcache_get_stats()。
参数:
type:期望抓取的统计信息类型,可以使用的值有{reset, malloc, maps, cachedump, slabs,
items,sizes}。 通过memcached协议指定这些附加参数是为了方便memcache开发者
(检查其中的变动)。
slabid: 用于与参数type联合从指定slab分块拷贝数据,cachedump命令会完全占用服务器
通常用于 比较严格的调试。
limit: 用于和参数type联合来设置cachedump时从服务端获取的实体条数。
返回值:返回关联数组表示的服务器统计信息 或者在失败时返回 FALSE。
15.bool Memcache::addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callback $failure_callback [, int $timeoutms ]]]]]]]] )
功能:向连接池中添加一个memcache服务器。
参数:
host:要连接的memcached服务端监听的主机位置。这个参数通常指定其他类型的传输比
如Unix域套接字使用 unix:///path/to/memcached.sock,这种情况下参数port 必须设
置为0。
port:要连接的memcached服务端监听的端口。当使用UNIX域套接字连接时设置为0。
persistent:控制是否使用持久化连接。默认TRUE。
weight:为此服务器创建的桶的数量,用来控制此服务器被选中的权重,单个服务器被选中
的概率是相对于所有服务器weight总和而言的。
timeout:连接持续(超时)时间(单位秒),默认值1秒,修改此值之前请三思,过长的连
接持续时间可能会导致失去所有的缓存优势。
retry_interval:服务器连接失败时重试的间隔时间,默认值15秒。如果此参数设置为-1表
示不重试。此参数和persistent参数在扩展以 dl()函数动态加载的时候无效。
每个失败的连接结构有自己的超时时间,并且在它失效之前选择后端服务请求时该结
构会被跳过。一旦一个连接失效, 它将会被成功重新连接或被标记为失败连接以在
下一个retry_interval秒重连。 典型的影响是每个web服务子进程在服务于一个页面
时将会每retry_interval秒 尝试重新连接一次。
status:控制此服务器是否可以被标记为在线状态。设置此参数值为FALSE并且retry_interval
参数 设置为-1时允许将失败的服务器保留在一个池中以免影响key的分配算法。对
于这个服务器的请求会进行故障转移或者立即失败, 这受限于
memcache.allow_failover参数的设置。该参数默认TRUE,表明允许进行故障转移。
failure_callback:允许用户指定一个运行时发生错误后的回调函数。回调函数会在故障转移
之前运行。回调函数会接受到两个参数,分别是失败主机的 主机名和端口号。
timeoutms
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
备注:
Memcache::addServer()增加一个服务器到连接池中。通过Memcache::addServer() 打开的连接将会在脚本执行结束后自动关闭,也可以使用Memcache::close()进行手动关闭。 您也可以使用memcache_add_server()来添加服务器。
当使用这个方法的时候(与Memcache::connect()和Memcache::pconnect()相反) 网络连接并不会立刻建立,而是直到真正使用的时候才建立。 因此在加入大量服务器到连接池中时也是没有开销的,因为它们可能并不会被使用。
故障转移可能在方法的任何一个层次发生,通常只要其他服务器可用用户就不会感受到。任何的socket或memcache服务器级别的错误 (比如内存溢出)都可能导致故障转移。而一般的客户端错误比如使用Memcache::add尝试增加一个已经存在的key则不会导致故障转移。
16. array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )
功能:返回一个二维关联数据的服务器统计信息。数组的key由host:port方式 组成,无效
的服务器返回的统计信息被设置为false,同样的,你可以使用函数
memcache_get_extended_stats()。
参数:参照Memcache::getStats()函数。
返回值:返回一个二维关联数组的服务器统计信息或者在失败时返回FALSE。
17. bool Memcache::setCompressThreshold ( int $threshold [, float $min_savings ] )
功能:开启对于大值的自动压缩。 同样你也可以使用函数
memcache_set_compress_threshold()。
参数:
threshold:控制多大值进行自动压缩的阈值。
min_saving:指定经过压缩实际存储的值的压缩率,支持的值必须在0和1之间。默认值是
0.2表示20%压缩率。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
18.bool Memcache::setServerParams ( string $host [, int $port = 11211 [, int $timeout [, int $retry_interval = false [, bool $status [, callback $failure_callback ]]]]] )
功能:用于运行时修改服务器参数。 同样你可以使用函数memcache_set_server_params()。
参数:
host:服务端监听地址。
port:服务端监听端口。
timeout:连接持续(超时)时间(单位秒),默认值1秒,修改此值之前请三思,过长的连
接持续时间可能会导致失去所有的缓存优势。
retry_interval:服务器连接失败时重试的间隔时间,默认值15秒。如果此参数设置为-1表
示不重试。此参数和persistent参数在扩展以 dl()函数动态加载的时候无效。
status:控制此服务器是否可以被标记为在线状态。设置此参数值为FALSE并且retry_interval
参数 设置为-1时允许将失败的服务器保留在一个池中以免影响key的分配算法。对
于这个服务器的请求会进行故障转移或者立即失败, 这受限于
memcache.allow_failover参数的设置。该参数默认TRUE,表明允许进行故障转移。
failure_callback:允许用户指定一个运行时发生错误后的回调函数。回调函数会在故障转移
之前运行。回调函数会接受到两个参数,分别是失败主机的 主机名和端口号。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。