zoukankan      html  css  js  c++  java
  • Memcached与Memcache区别

    在写这篇文章之前一直对memcache 、memcached模糊,相差一个字母,特此总结下:

    Memcache是什么?

    Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash表,Memcached自管理这些Hash表。

    Memcached是简单而强大的。它简单的设计促进迅速部署,易于发展所面临的问题,解决了很多大型数据缓存。它的API可供最流行的语言。

    Memcache官方网站:http://memcached.org/

    Memcached又是什么?

    Memcache是该系统的项目名称,Memcached是该系统的主程序文件(字母d可以理解为daemon),以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,使用共享内存存取数据。

    memcache客户端(php)

    PHP有两个memcache客户端:php memcache和php memcached。

    php memcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;

    http://pecl.php.net/package/memcache

    php memcached是基于原生的c的libmemcached的扩展,更加完善,建议替换为php memcached。

    http://pecl.php.net/package/memcached

    memcached安装(服务端)

        cd /root/lnmp/src/
        wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
        tar xzf memcached-1.4.15.tar.gz
        cd memcached-1.4.15
        ./configure --prefix=/usr/local/memcached
        make && make install
        ln -s /usr/local/memcached/bin/memcached /usr/bin/memcached
        /bin/cp scripts/memcached.sysv /etc/init.d/memcached
        sed -i 's@^USER=.*@USER=root@' /etc/init.d/memcached
        sed -i 's@chown@#chown@' /etc/init.d/memcached
        sed -i 's@/var/run/memcached/memcached.pid@/var/run/memcached.pid@' /etc/init.d/memcached
        sed -i 's@^prog=.*@prog="/usr/local/memcached/bin/memcached"@' /etc/init.d/memcached #前面有软链接,这里可以省略
        chmod +x /etc/init.d/memcached
        chkconfig --add memcached
        chkconfig memcached on
        cd ..
    

    启动memcached:

    1. service memcached start  #或者执行下面
    2. memcached -p 11211 -l 127.0.0.1 -d -u root -P /var/run/memcached.pid -m 64M -c 1024

    几个参数的解释:

    • -p memcached监听的TCP端口
    • -l 监听的ip地址,127.0.0.1是本机,当然也可以写上你的服务器IP,如:10.0.0.10,这是我服务器的IP地址,如果你需要多个服务器都能够读取这台memcached的缓存数据,那么就必须设定这个ip
    • -d 以daemon方式运行,将程序放入后台
    • -u memcached的运行用户,我设定的是nobody
    • -P memcached的pid文件路径
    • -m memcached可以使用的最大内存数量
    • -c memcached同时可以接受的最大的连接数

    如果你希望以socket方式来访问memcached,那么在启动的时候就必须去掉 -l和-p参数,并加上-s参数:

    • -s memcached的socket文件路径

    php中memcache扩展组件的安装

        tar xzf memcache-2.2.7.tgz
        cd memcache-2.2.7
        /usr/local/php/bin/phpize
        ./configure --with-php-config=/usr/local/php/bin/php-config
        make && make install
        cd ../
    

    按照我的环境,编译出来的memcache.so自动生成在/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ 目录下,如果你的环境不一样,你得根据自己情况修改你的php.ini了。

    接着要做的工作就是让php加载这个扩展,编辑你的php.ini,在适当位置(通常是最后,也可以是独立的一个ini文件)加入如下行:

    1. extension=memcache.so
      

    然后重启php或者apache,运行一个phpinfo()来确认一下,正常的话你应该可以看到这个了:memcache

    php-memcache的简单使用举例:

        <?php
        $memcache = new Memcache;
        $memcache->connect('127.0.0.1','11211');
        $memcache->setCompressThreshold(20000, 0.2);    // 设置压缩   
        echo $memcache->getVersion();                   // 输出memcached版本   
        $test = array(1,2,3,4,5,'abcde');               //生成一个数组   
        if($memcache->get('test')){
                print_r($memcache->get('test'));        //获取数据   
                echo "\n";
                echo 'cached';
                echo "\n";
        }else{
                $memcache->set('test',$test,0,30);      //写入数据   
                echo 'no cache';
                echo "\n";
        }
        ?>
    

    php中memcached扩展组件的安装LNMP一键安装包

    最新版ibmemcached-1.0.17.tar.gz可能会报错error: ‘HAVE_MEMCACHED_BINARY’ was not declared in this scope

    用libmemcached-1.0.16.tar.gz没问题

    安装如下:

    1. wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
    2. wget http://pecl.php.net/get/memcached-2.1.0.tgz
    3. tar xzf libmemcached-1.0.16.tar.gz
    4. cd libmemcached-1.0.16
    5. ./configure --with-memcached=/usr/local/memcached
    6. make && make install
    7. cd ..
    8. tar xzf memcached-2.1.0.tgz
    9. cd memcached-2.1.0
    10. /usr/local/php/bin/phpize
    11. ./configure --with-php-config=/usr/local/php/bin/php-config
    12. make && make install

    按照我的环境,编译出来的memcached.so自动生成在 /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ 目录下,如果你的环境不一样,你得根据自己情况修改你的php.ini了。

    接着要做的工作就是让php加载这个扩展,编辑你的php.ini,在适当位置(通常是最后,也可以是独立的一个ini文件)加入如下行:

    1. extension=memcached.so

    然后重启php或者apache,运行一个phpinfo()来确认一下,正常的话你应该可以看到这个了:memcached

    总结:

    其实很简单,memcache是php的一个扩展,用于php管理memcached(服务端),php-memcache.dll。

    如果安装了memcached(服务端)不安装扩展,那么php无法操控memcached,但是命令行使用起来没有问题

    如果安装了PHP memcache客户端(php memcache和php memcached)。但是没有安装memcached(服务端)服务,那么这个就无法使用

    只有同时安装了memcached(服务端)和PHP memcache客户端扩展才可以提高动态网站性能

      • 由于项目需要这里还是区分下Memcached与Memcache差别,谨防再步入坑中
      • 目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些。
        memcache:http://www.php.net/memcache
        memcached:http://php.net/memcached
        2 . Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
      • memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
      • memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。

    参考:https://linuxeye.com/345.html

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453265.html
Copyright © 2011-2022 走看看