memcached以及php-memcached和nginx-memcached

memcached以及php-memcached和nginx-memcached

2016年2月24日

    1. memcached功能和说明:

    memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过较低对databases的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、api调用或者页面引用结果的直接数据,如字符串、对象等。

     

    memcached是以livejournal旗下danga interactive 公司的brad fitzpatric为首开发的一款软件。现在已成为minx,hatena,facebook,vox,livejournal等众多服务中提高web应用扩展性的重要因素。

     

    memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件,其设计哲学思想主要反映在如下两个方面

    1. 简单的key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储由键、过期时间、可选标志及数据四个部分组成
    2. 功能的实现一半依赖于客户端,一般基于服务器:客户负责发送存储项至服务器段、从服务器获取数据以及无法连接至服务器时采用相应的动作:服务端负责接收、存储数据,并负责数据项的超时过期
    3. o(1)的执行效率
    4. 清理超期数据:默认情况下,memcahced是一个Lru缓存,同时,它按照事先预定的时长清理超期数据:但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户端所见;而且,memcached也不会真正按期清理缓存,而仅当get达到时检测其时长。
    5. memcached提供了为数不多的几个命令来完成与服务器之间的交互:这些命令基于memcached的协议实现:

    存储

    获取数据

    统计命令

    清理命令

    set,add,repalce,append,prepend

    get,delete,incr/decr

    stats,stats items,stats slabs,stats sizes

    flush all

    1. 安装memcachedcentos6.5yum源里面自带memcached,可以通过yum -y isntall memecached来安装,这里说下通过源码编译的安装。
      1. 安装libevent:

    下载

      curl -O -L https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

    解压缩

    tar xvf libevent-2.0.21-stable.tar.gz

    配置编译参数

    cd libevent-2.0.21-stable

    ./configure --prefix=/usr/local/libevent

    编译安装

    make && make install

    添加到系统库中

    echo "/usr/local/libevent/lib/" > /etc/ld.so.conf.d/libevent.conf

    ldconfig

     

     

    1. 安装memcached,下载和解压缩参考上面的步骤。

    配置编译参数

     ./configure --prefix=/usr/local/memcached --with-libevent=/usr/locl/libevent

    编译安装

    make && make install

    1. 提供启动脚本和配置文件:这里参考的yum源里面的启动脚本。

    将此文件保存为/etc/init.d/memcached

    [root@rs1 bin]# cat /etc/init.d/memcached

    #! /bin/sh

    #

    # chkconfig: - 55 45

    # description:  The memcached daemon is a network memory cache service.

    # processname: memcached

    # config: /etc/sysconfig/memcached

    # pidfile: /var/run/memcached/memcached.pid

     

    # Standard LSB functions

    #. /lib/lsb/init-functions

     

    # Source function library.

    . /etc/init.d/functions

     

    PORT=11211

    USER=memcached

    MAXCONN=1024

    CACHESIZE=64

    OPTIONS=""

     

    if [ -f /etc/sysconfig/memcached ];then

            . /etc/sysconfig/memcached

    fi

     

    # Check that networking is up.

    . /etc/sysconfig/network

     

    if [ "$NETWORKING" = "no" ]

    then

            exit 0

    fi

     

    RETVAL=0

    prog="memcached"

    pidfile=${PIDFILE-/var/run/memcached/memcached.pid}

    lockfile=${LOCKFILE-/var/lock/subsys/memcached}

     

    start () {

            echo -n $"Starting $prog: "

            # Ensure that /var/run/memcached has proper permissions

            if [ "`stat -c %U /var/run/memcached`" != "$USER" ]; then

                    chown $USER /var/run/memcached

            fi

     

            daemon --pidfile ${pidfile} /usr/local/memcached/bin/memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P ${pidfile} $OPTIONS

            RETVAL=$?

            echo

            [ $RETVAL -eq 0 ] && touch ${lockfile}

    }

    stop () {

            echo -n $"Stopping $prog: "

            killproc -p ${pidfile} /usr/local/memcached/bin/memcached

            RETVAL=$?

            echo

            if [ $RETVAL -eq 0 ] ; then

                    rm -f ${lockfile} ${pidfile}

            fi

    }

     

    restart () {

            stop

            start

    }

     

     

    # See how we were called.

    case "$1" in

      start)

            start

            ;;

      stop)

            stop

            ;;

      status)

            status -p ${pidfile} memcached

            RETVAL=$?

            ;;

      restart|reload|force-reload)

            restart

            ;;

      condrestart|try-restart)

            [ -f ${lockfile} ] && restart || :

            ;;

      *)

            echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart}"

            RETVAL=2

            ;;

    esac

     

    exit $RETVAL

    为脚本添加可执行权权限

    chmod +x /etc/init.d/memcached

    添加系统服务

    chkconfig --add memcached

    1. 提供配置文件:上面的启动脚本文件里面的配置文件地址为/etc/sysconfig/memcached

    配置文件内容

    [root@rs1 bin]# cat /etc/sysconfig/memcached

    PORT="11211"

    USER="memcached"

    MAXCONN="1024"

    CACHESIZE="64"

    OPTIONS=""

    1. 启动及验证是否正常运行

    启动

    service memecached start

    验证端口是否开启

    可以登录即正常

    telnet localhost 11211

    验证是否可以存储

    set test 10 0 12

    hello world!

    回车后可以看到已经存储了

    STORED

    验证是否可以获取刚才存储的信息

    get test

    回车后可以看到如下信息

    VALUE test 10 12

    hello world!

    END

    1. 安装phpmemcahe扩展:这里我们在httpd下运行php,先安装httpd,php,然后再安装memcahe扩展
      1. 安装httpdphp

    安装

    yum -y install httpd php

    启动httpd

    service httpd start

    确认httpd是否工作

    [root@rs1 etc]# curl 127.0.0.1

    rs1

    确认php是否工作

    <?php

    phpinfo();?>

    添加到/var/www/html/index.php里面,删除index.html文件

    使用curl验证php是否工作:

    crul 127.0.0.1/index.php如果出来一大堆php解释的信息就是OK了。

    或者用elinks 127.0.0.1/index.php 会看到 php的运行信息。

     

    1. 添加phpmemcahe扩展。

    1、直接使用 yum -y install php-pecl-memcache.x86_64安装就可以了,可以在phpinfo里面看到支持了memchache的扩展。安装好之后测试。

    将代码添加到页面里面测试:

    <?php

        $mem = new Memcache;

        $mem->connect("127.0.0.1", 11211) or die ("could not connet");

        $mem->set('key','This is a test!', 0, 60);

        $val = $mem->get('key');

        echo $val;

    ?>

    如果出现了this is a test则证明成功。也可以将自带的memcache管理的php端安装起来。

     cp  /usr/share/doc/php-pecl-memcache-3.0.5/memcache.php /var/www/html/

    然后修改里面的server的配置,

    $MEMCACHE_SERVERS[] = '192.168.8.21:11211'; // add more as an array

    访问/memcahe.php则可以查看相关的状态了。

    顺便说下注意下selinux的规则。默认规则下memcache的扩展不能访问网络,需要关掉才行,或者自己加规则。

     

posted @ 2016-04-03 20:30  Lkad  阅读(192)  评论(0编辑  收藏  举报