zoukankan      html  css  js  c++  java
  • PHP环境下Memcache的使用方法

    一、Memcache简介

    Memcache是danga.com的一个项目,最早是为LiveJournal服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以对应任意多个链接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,所以速度非常快。

    二、Memcache和Memcached的区别

    为什么会有Memcache和Memcached两个名称?其实Memcache是这个项目的名称,而Memcached是他服务器端的主程序文件。一个是项目名称,一个是主程序文件名。

    三、Memcache的服务器端和客户端安装

    分为两个过程:Memcache服务器端的安装和Memcached客户端的安装

    所谓服务器端的安装就在在服务器(一般都是linux系统)上安装Memcache实现数据的存储。

    所谓客户端的安装就是指php去使用服务器端的Memcache提供的函数,需要php添加扩展。

    四、PHP的Memcache客户端所有方法总结

    memcache函数所有的方法列表如下:

    Memcache::add - 添加一个值,如果已经存在,则返回false

    Memcache::addServer - 添加一个可供使用的服务器地址

    Memcache::close - 关闭一个Memcache对象

    Memcache::connect - 创建一个Memcache对象

    memcache_debug - 控制调试功能

    Memcache::decrement - 对保存的某一个key中的值进行减法操作

    Memcache::delete - 删除一个key值

    Memcache::flush - 清除所有缓存的数据

    Memcache::get - 获取一个key值

    Memcache::getExtendedStats - 获取进程池中所有进程的运行系统统计

    Memcache::getServerStatus - 获取运行服务器的参数

    Memcache::getStats - 返回服务器的一些运行统计信息

    Memcache::getVersion - 返回运行的Memcache的版本信息

    Memcache::increment - 对保存的某个key中的值进行加法操作

    Memcache::pconnect - 创建一个Memcache的持久连接对象

    Memcache::replace - 对一个已有的key进行覆写操作

    Memcache::set - 添加一个值,如果已经存在,则覆写

    Memcache::setCompressThreshold - 对大于某一大小的数据进行压缩

    Memcache::setServerParams - 在运行时修改服务器的参数

    五、PHP的Memcache操作方法分解

    Memcache::add用法:

    bool Memcache::add(string $key,mixed $var[,int $flag[,int $expire]]);

    说明:

    如果$key不存在的时候,使用这个函数来存储$var的值。功能相同的函数memcache_add()。

    参数:

    $key:将要存储的键值。

    $var:存储的值,字符型和整数型会按照原值保存,其他类型自动序列化以后保存。

    $flag:是否用MEMCACHE_COMPRESSED来压缩存储的值,,true表示压缩,false表示不压缩。

    $expire:存储值得过期时间,如果0表示不会过期,你可以用unix时间戳或者描述来表示从现在开始时间,但是你在使用秒数表示的时候,不要超过2592000秒(表示30天)。

    返回值:如果成功返回true,失败则返回false。如果$key值已经存在,则会返回false,其他情况下Memcache::add()用法类似于Memcache::set()。

    示例代码:

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->connect('127.0.0.1',11211);

    $memcache->add('var_key','test variable',false,30);

    echo $memcache->get('var_key').'<br>';

    $memcache->close();

    //面向过程

    $memcache = memcache_connect('127.0.0.1',11211);

    memcache_add($memcache,'var_key','test variable',false,30);

    echo memcache_get($memcache,'var_key');

    memcache_close($memcache);

    ?>

    Memcache::addServer用法:

    bool Memcache::addServer ( string $host [, int $port [, bool $persistent [, int $weight [, int$timeout [, int $retry_interval [, bool $status [, callback $failure_callback ]]]]]]] )

    说明:

    添加一个可供使用的服务器地址到连接池中,连接用Memcache::addServer打开,脚本执行完后自动关闭,或者可以用Memcache::colse()手动关闭。相同的函数时memcache_add_server()。

    当用这个方法的时候(相对于Memcache::connect()和Memcache::pconnect()方法),网络连接只有等需要的时候才会连接,因此不会因为增加很多的服务器到连接池而增加系统负担,因为很多服务器可能没有使用。

    故障恢复会发生在这个方法执行的任何阶段,只要其他的服务器是正常的,这些连接请求的失败用户不会注意到。任何一种socket或者memcached服务器级的错误可以触发故障恢复。正常的客户端错误比如增加一个存在的键值不会引发故障恢复。

    参数: 
    $host服务器的地址 
    $port服务器端口 
    $persistent是否是一个持久连接 
    $weight这台服务器在所有服务器中所占的权重 
    $timeout连接的持续时间 
    $retry_interval连接重试的间隔时间,默认为15,设置为-1表示不进行重试 
    $status控制服务器的在线状态 
    $failure_callback允许设置一个回掉函数来处理错误信息。 

    返回值: 
    如果成功则返回 TRUE,失败则返回 FALSE。

    示例代码:

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->addServer('127.0.0.1',11211);

    $memcache->addServer('182.92.233.100',11211);

    //$memcache->flush();

    var_dump($memcache->add('var_key','test variable1111',false,24*60*60));

    echo $memcache->get('var_key');

    $memcache->close();

    //面向过程

    $memcache = memcache_connect('10.0.3.73',11211);

    memcache_add_server($memcache,'182.92.233.100',11211);

    var_dump(memcache_get_extended_stats($memcache));

    memcache_close($memcache);

    ?>

    Memcache::close用法:

    bool Memcache::close(viod);

    说明:

    关闭memcache服务器连接。这个函数不会关闭长连接,长连接只有在web服务器关闭或者重启的时候才会关闭。相同函数memcache_close()。

    返回值:

    如果成功则返回true,失败则返回false。

    示例代码:

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->connect('127.0.0.1',11211);

    if($memcache->close()){

          echo '已断开与服务器的链接<br>';

    }

    //面向过程

    $memcache = memcache_connect('127.0.0.1',11211);

    if(memcache_close($memcache)){

          echo '已断开与服务器的链接<br>';

    }

    ?>

    Memcache::connect用法

    bool Memcache::connect(string $host[,int $port[,int $timeout]]);

    说明:

    打开memcached服务器连接,建立一个到memcached服务器的连接,用Memcache::connect打开的连接会在脚本执行完毕后自动关闭。你也可以用Memcache::close()去关闭连接。相同的函数时memcache_close()。

    参数:

    $host:指向memcached正在收听的连接主机。

    $port:指向memcached正在收听的连接端口。

    $timeout:用于连接守护进程的秒数,当你改变默认1秒的值时,你需要考虑一下,如果你的连接太慢的话,你可能会失去缓存的优势。

    返回值:

    如果成功则返回true,失败则返回false。

    示例代码:

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->connect('127.0.0.1',11211);

    $memcache->close();

    //面向过程

    $memcache = memcache_connect('127.0.0.1',11211);

    memcache_close($memcache);

    ?>

    Memcache::debug用法:

    bool  memcache_debug(bool $on_off);

    说明:

    控制调试功能,前提是php在编译的时候使用了-enable_debug选项,否则这个函数不会有作用。

    参数:

    $on_off:true表示开启调试,false表示关闭调试

    返回值:

    如果php在编译的时候使用了-enable-debug选项,返回true,否则返回false。

    Memcache::decrement方法:

    Int Memcache::decrement(string $key[,int value]);

    说明

    Memcache::decrement方法的作用是对保存的某个key的值进行减法操作,用法跟Memcache::increment类似。

    参数

    Key: 想要减少的键的名字

    Value:想要减少的值

    返回值:

    如果成功,返回被减少后的值,如果失败返回false

    示例代码:

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->connect('127.0.0.1',11211);

    $memcache->flush();

    $memcache->set('var_key',8,false,24*60*60);

    echo $memcache->get('var_key').'<br>';

    echo $memcache->increment('var_key',4).'<br>';

    echo $memcache->decrement('var_key',5).'<br>';

    $memcache->close();

    //面向过程

    $memcache = memcache_connect('127.0.0.1',11211);

    memcache_flush($memcache);

    memcache_set($memcache,'var_key',8,false,24*60*60);

    echo memcache_get($memcache,'var_key').'<br>';

    echo memcache_increment($memcache,'var_key',4).'<br>';

    echo memcache_decrement($memcache,'var_key',5).'<br>';

    memcache_close($memcache);

    ?>

    Memcache::delete用法

    bool Memcache::delete(string $key[,int timeout]);

    说明

    删除一个key值,如果参数timeout被设置,那么存储的值会在设置的秒数以后过期,你也可以用函数memcache_delete()。

    返回值

    如果成功则返回true,失败则返回false。

    示例代码

    <?php

    //面向对象

    $memcache = new Memcache;

    $memcache->connect('127.0.0.1',11211);

    $memcache->flush();

    $memcache->set('var_key',8,false,24*60*60);

    echo $memcache->get('var_key').'<br>';

    $memcache->delete('var_key',0);

    echo $memcache->get('var_key').'<br>';

    $memcache->close();

    //面向过程

    $memcache = memcache_connect('127.0.0.1',11211);

    memcache_flush($memcache);

    memcache_set($memcache,'var_key',8,false,24*60*60);

    echo memcache_get($memcache,'var_key').'<br>';

    memcache_delete($memcache,'var_key',0);

    echo memcache_get($memcache,'var_key').'<br>';

    memcache_close($memcache);

    ?>

    系统提示:

    PHP Notice:  Memcache::delete(): Server 192.168.10.131 (tcp 11211) failed with: CLIENT_ERROR bad command line format.  Usage: delete <key> [noreply]

    memcache服务端版本>=1.4.3的delete方法与之前的版本有调整,因此有这个问题。最好解决是把linux下的memcache服务端版本改为1.4.2版本的。

    Memcache::flush方法

    bool Memcache::flush(viod);

    说明

    清除所有缓存数据。Memcache::flush实际上没有释放资源,它仅仅将所有的缓存标记为过期,这样可以使新的缓存覆盖被占用的内存空间。相同函数memcache_flush()。

    返回值

    如果成功则返回true,失败则返回false。

  • 相关阅读:
    android数据恢复
    UVA 690 Pipeline Scheduling
    2017 国庆湖南 Day4
    2017 国庆湖南 Day5
    2017 国庆湖南 Day6
    2017国庆 清北学堂 北京综合强化班 Day1
    2017 国庆湖南Day2
    bzoj 2962 序列操作
    UVA 818 Cutting Chains
    UVA 211 The Domino Effect
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9282466.html
Copyright © 2011-2022 走看看