zoukankan      html  css  js  c++  java
  • php之memcache学习

    php之memcache学习


    简介:

    memcache是一个分布式高速缓存系统。

      分布式是说可以部署在多台服务器上,实现集群效果;

      高速是因为数据都是维护在内存中的;


    特点和使用场景:

      1、非持久化存储:对数据存储要求不高(断电或重启后数据会清空);

      2、分布式存储:不适合单机使用(单机使用消耗内存,建议单独做一台memcache服务器,和mysql服务器分开);

      3、Key/Value存储:格式简单,不支持List、Array数据格式。


    安装:

      1、编译安装 Libevent Memcache

      2、使用依赖管理工具 yum、apt-get

      建议使用memcached,而不再使用memcache。

    CentOs: sudo yum install memcached

    Ubuntu :sudo apt-get install memcached


    启动:

      CentOs:

    /usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root

    (说明:-d以守护进程方式启动,-l指定IP地址,-p指定端口号,-m分配的内存,-u以哪个用户运行memcache)。

      ubuntu:

    memcached -d -l 127.0.0.1 -p 11211 -m 150 -u test

    查看memcached是否安装:  

    ps aux | grep memcached

    或者

    ps -ef | grep memcached

    ps aux 是用BSD的格式来显示 java这个进程

    显示的项目有:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND
    ps -ef 是用标准的格式显示java这个进程
    显示的项目有:UID , PID , PPID , C , STIME , TTY , TIME , CMD

    查看mamcached是否启动成功:

    telnet 127.0.0.1 11211

    然后结果如下:

    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.

    Escape character is '^]'.是一个提示,提示你使用Ctrl键+]键可以呼出telnet的命令行,

    在telnet命令行输出quit可以退出telnet命令行。

    停止memcached服务:

    sudo kill PID

    杀掉memcached的进程,kill 后跟的是memcached的进程号。

    然后再telnet则显示:

    Trying 127.0.0.1...
    telnet: Unable to connect to remote host: Connection refused

     memcached客户端的安装

      1、安装Libmemcached。

      2、为php安装memcached扩展。

      centos:

      这次以编译安装方式:

        (1)下载安装包,libmemcached-1.0.18.tar.gz。

        (2)解压:tar zxvf libmemcached-1.0.18.tar.gz。

        (3)进入目录:cd libmemcached-1.0.18。

        (4)生成编译文件并指定路径:./configure --prefix=/usr/lib/libmemcached。

        (5)编译、安装:make && make install。

      安装php扩展:

        (1)下载安装包,打开php扩展官网,https://pecl.php.net/。搜索memcached,

          然后找到复制下载链接,

          例如:https://pecl.php.net/get/memcached-2.2.0.tgz。

    wget https://pecl.php.net/get/memcached-2.2.0.tgz

        (2)解压:tar zxvf memcached-2.2.0.tgz。

        (3)进入目录:cd memcached-2.2.0。

        (4)使用phpize安装:phpize。

        (5)生成编译文件并指定路径:./configure。

        (如果报错提示找不到php-config或者找不到libmemcached,则需要指定自己的配置路径)

          ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached=/usr/lib/libmemcached

          根据自己实际情况配置路径。

          如果提示不支持 sasl.h 就需要增加个参数 --disable-memcached-sasl。

          如果报:

          pkg-config not found
          configure: error: Please reinstall the pkg-config distribution,

          就安装pkg-config。

        (6)编译:make。

        (7)安装:make install,会看到结果:

    Installing shared extensions:     /usr/lib/php5/20121212/

        (8)执行完成后,会显示出扩展得路径,打开php.ini,

          追加memcached扩展:extension=memcached.so。

          重启php服务,就可以通过phpinfo,看到memcached扩展。

    sudo service php5-fpm restart

      Ubuntu:

         sudo apt-get install libmemcached

    如果报如下错误:  

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Package libmemcached is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    
    E: Package 'libmemcached' has no installation candidate

       添加了许多软件源依然没有解决,所以使用上边编译安装的方式安装。 


     php中使用memcache:

      系统类:addServer,addServers,getStats,getVersion。

      数据类:add,set,get,delete,flush,replace,increment。

      进阶类:setMulti,deleteMulti,getMulti,getResultCode,getResultMessage。


     Thinkphp3.2使用memcached:

    方式一:直接调用php的扩展memcached类:

    $mc = new Memcached();
    $mc->addServer("localhost", 11211);
    
    $mc->set("foo", "Hello!");
    $mc->set("bar", "Memcached...");
    
    $arr = array(
        $mc->get("foo"),
        $mc->get("bar")
    );
    var_dump($arr);

    方式二:调用ThinkPHP自带的 ThinkCacheDriverMemcached.class.php类。

        public function test(){
            $mem_config = array(
                    'servers'=>[['127.0.0.1',11211]],
                    'prefix'=>'think',
                    'expire'=>3600
            );
            $mc = new ThinkCacheDriverMemcached($mem_config);
                    //设置
            $mc->set("foo3", "Hello memcached!");
                    //获取
            $a = $mc->get("foo3");                
            var_dump($a);
                    //删除
            $mc->rm('foo3');
            $a = $mc->get("foo3");                
            var_dump($a);
        }    

    方式三:使用tp的S方法,直接在控制器中使用:

        public function test(){
            //配置memcached参数
            $mem_config = array(
                'type'=>'memcached',
                'servers'=>[['127.0.0.1',11211]],
                'prefix'=>'think',
                'expire'=>3600
            );
            //设置缓存
            S($mem_config);
            //设置变量
            S('foo2','hello2');
            //读取变量
            $a = S('foo2');
            var_dump($a);
        }

    方式四:使用tp的S方法,在配置文件config.php中设置全局的缓存:

        //缓存配置
        'DATA_CACHE_TYPE' => 'Memcached',
        'MEMCACHED_SERVER' => array(
            array('127.0.0.1', 11211, 0)
        ),
        'DATA_CACHE_TIME'       =>  3600,      // 数据缓存有效期 0表示永久缓存
        'DATA_CACHE_PREFIX'     =>  'think_',     // 缓存前缀

       

  • 相关阅读:
    linux-centos7 安装 maven 代码管理工具,以及常见配置
    linux-centos7 安装 jre + tomcat 实现 web 服务器
    python 开发语言 博客目录
    生存分布函数
    债务偿还
    密度聚类算法
    POI兴趣点搜索
    区域地址搜索
    地址之间的距离
    地理坐标转换
  • 原文地址:https://www.cnblogs.com/gyfluck/p/9634416.html
Copyright © 2011-2022 走看看