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服务端监听端口。当使用Unixsocket的时候要设置此参数为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: 要获取值的keykey数组。

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()相反网络连接并不会立刻建立,而是直到真正使用的时候才建立。 因此在加入大量服务器到连接池中时也是没有开销的,因为它们可能并不会被使用。

故障转移可能在方法的任何一个层次发生,通常只要其他服务器可用用户就不会感受到。任何的socketmemcache服务器级别的错误 (比如内存溢出)都可能导致故障转移。而一般的客户端错误比如使用Memcache::add尝试增加一个已经存在的key则不会导致故障转移。

 

16. array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )

功能:返回一个二维关联数据的服务器统计信息。数组的keyhost: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:指定经过压缩实际存储的值的压缩率,支持的值必须在01之间。默认值是

          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

 

posted @ 2015-09-10 16:35  疯一样的狼人  阅读(527)  评论(0编辑  收藏  举报