zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/wujuntian/p/4798346.html
Copyright © 2011-2022 走看看