zoukankan      html  css  js  c++  java
  • Centos安装Memcached和(Nginx)Memcache扩展详细教程

    下载memadmin,下载地址:http://www.junopen.com/memadmin/ 并在IIS新建站点。 测试地址:http://wap.yousawang.com/mem ,

    1.重启 apache

      service httpd restrat

      /etc/init.d/httpd stop

      /etc/init.d/httpd start

      2.重启 mysql

      service mysqld restart

      /etc/init.d/mysqld stop

      /etc/init.d/mysqld start

      3.重启Nginx

      service nginx restart

      /etc/init.d/nginx stop

      /etc/init.d/nginx start

     4.重启fpm

    php 5.3.3 中 php-fpm 的重启、终止操作命令

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据.简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

    工作原理:

    ①客户端第一次访问应用程序时,会到数据库(RDBMS)中取出数据,返回给客户端;同时也将取出的数据保存到memcached中。

    ② 第二次访问时,因为数据已经缓存,不不用去数据库查询了,直接从memcached取。
    那么memcached的快速和高效率是如何体现出来的呢?我们都清楚,RDBMS是文件型的数据库,最终还是以文件的形式保存在磁盘上。而memcached则不一样,它是key:value关系型的数据库,是保存在内存中的。那么就不用我再做说明了,内存的读写速度要比磁盘的读写速度快得多,前者是后者的10的6次方倍。http://blog.rekfan.com/?p=172

    ③memcached是基于libevent的事件处理。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan Kegel的The C10K Problem。欲了解更更多关于libevent:http://monkey.org/~provos/libevent/ 。

    安装环境:
    操作系统: CentOS 6.2 X86_64
    Libevent: http://www.monkey.org/~provos/libevent/
    Memcache: http://www.danga.com/memcached/dist/
    PHP扩展: http://pecl.php.net/package/memcache

    安装Memcached步骤:

    1.编译安装Libevent

    cd ~
    curl -O https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz
    tar -zxvf libevent-2.0.19-stable.tar.gz
    cd libevent-2.0.19-stable
    ./configure
    make
    make install
    或者直接
    # yum install libevent libevent-devel -y
    检测一下查看是否安装:
    ls -al /usr/lib | grep libevent
    #显示如下语句说明成功
    libevent.so -> libevent-2.0.so.5.1.7

    2.安装Memcache

    cd ~
    curl -O http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
    tar -zxvf memcached-1.4.13.tar.gz
    cd memcached-1.4.13
    ./configure --prefix=/usr/local/memcached
    make
    make install

    检测是否成功安装
    ls -al /usr/local/memcached/bin/mem*
    #显示如下语句说明成功
    /usr/local/memcached/bin/memcached

    3.配置环境变量:
    进入用户宿主目录,编辑.bash_profile,为系统环境变量LD_LIBRARY_PATH增加新的目录,需要增加的内容如下:
    # vi .bash_profile
    MEMCACHED_HOME=/usr/local/memcached
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib
    刷新用户环境变量:
    # source .bash_profile

    4.编写memcached服务启停脚本

    # cd /etc/init.d
    vi memcached
    脚本内容如下:
    --------------------------------------------------------------------------------
    #!/bin/sh
    #
    # Startup script for the server of memcached
    #http://blog.rekfan.com/?p=172
    # processname: memcached
    # pidfile: /usr/local/memcached/memcached.pid
    # logfile: /usr/local/memcached/memcached_log.txt
    # memcached_home: /etc/memcached
    # chkconfig: 35 21 79
    # description: Start and stop memcached Service

    # Source function library
    . /etc/rc.d/init.d/functions

    RETVAL=0

    prog="memcached"
    basedir=/usr/local/memcached
    cmd=${basedir}/bin/memcached
    pidfile="$basedir/${prog}.pid"
    #logfile="$basedir/memcached_log.txt"

    # 设置memcached启动参数
    ipaddr="192.168.1.101"          # 绑定侦听的IP地址
    port="11211"                    # 服务端口
    username="root"                 # 运行程序的用户身份
    max_memory=64                   # default: 64M | 最大使用内存
    max_simul_conn=1024             # default: 1024 | 最大同时连接数
    #maxcon=51200
    #growth_factor=1.3              # default: 1.25 | 块大小增长因子
    #thread_num=6                   # default: 4
    #verbose="-vv"                  # 查看详细启动信息
    #bind_protocol=binary           # ascii, binary, or auto (default)

    start() {
    echo -n $"Starting service: $prog"
    $cmd -d -m $max_memory -u $username -l $ipaddr -p $port -c $max_simul_conn -P $pidfile
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
    }

    stop() {
    echo -n $"Stopping service: $prog  "
    run_user=`whoami`
    pidlist=`ps -ef | grep $run_user | grep memcached | grep -v grep | awk '{print($2)}'`
    for pid in $pidlist
    do
    #           echo "pid=$pid"
    kill -9 $pid
    if [ $? -ne 0 ]; then
    return 1
    fi
    done
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
    }

    # See how we were called.
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    #reload)
    #    reload
    #    ;;
    restart)
    stop
    start
    ;;
    #condrestart)
    #    if [ -f /var/lock/subsys/$prog ]; then
    #        stop
    #        start
    #    fi
    #    ;;
    status)
    status memcached
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    esac
    exit $RETVAL

    --------------------------------------------------------------------------------
    http://blog.rekfan.com/?p=172
    5.设置脚本可被执行:

    # chmod +x memcached
    # chkconfig --add memcached
    # chkconfig --level 35 memcached on

    6.设置防火墙

    vi /etc/sysconfig/iptables

    将下面这行加入进去

    -A RH-Firewall-l-INPUT -p tcp -m tcp --dport 11211 -j ACCEPT
    注:将memcached加入到防火墙允许访问规则中
    service iptables restart
    注:防火墙重启

    7.启动memcached
    # service memcached start
    //启动的时候实际上是调用了下面的这个命令,以守护进程的方式来启动memcached
    /usr/local/memcached/bin/memcached -d -m 64 -u root -l 192.168.1.101
    -p 11211 -c 1024 -P /usr/local/memcached/memcached.pid

    8.查看memcached是否启动:

    # ps -ef | grep memcached

    9.memcached命令参数解释
    http://blog.rekfan.com/?p=172

    参数 参数解释及说明
    -p <num> 监听的端口
    -l <ip_addr> 连接的IP地址,,默认是本机。-l选项可以不使用,此时表示在所有网络接口地址上监听。建议是-l <ip_addr>指定一个内部网络IP地址,以避免成为外部网络攻击的对象
    -d start 启动memcached 服务
    -d restart 重起memcached 服务
    -d stop|shutdown 关闭正在运行的memcached 服务
    -d install 安装memcached 服务
    -d uninstall 卸载memcached 服务
    -u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
    -m <num> 最大内存使用,单位MB。默认64MB
    -M 内存耗尽时返回错误,而不是删除项
    -c <num> 最大同时连接数,默认是1024
    -f <factor> 块大小增长因子,默认是1.25
    -n <bytes> 最小分配空间,key+value+flags默认是48
    -h 显示帮助

    安装PHP Memcache扩展:

    可以使用php自带的pecl安装程序
    # /usr/local/servers/php/bin/pecl install memcache

    也可以从源码安装
    # wget http://pecl.php.net/get/memcache-2.2.7.tgz
    # tar zxf memcache-2.2.7.tgz
    # cd memcache-2.2.7
    # /usr/local/php/bin/phpize
    # ./configure --enable-memcache=/usr/local/memcached --with-php-config=/usr/local/php/bin/php-config
    # make && make inst

    安装完后会有类似这样的提示:
    Installing shared extensions: /usr/local/servers/php5/lib/php/extensions/no-debug-non-zts-20060922/
    把这个记住,然后修改php.ini,
    添加一行
    extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so"

    测试代码:

    <?php

    $memcache = new Memcache;
    $memcache->connect('localhost', 11211) or die ("Could not connect");

    $version = $memcache->getVersion();
    echo "Server's version: ".$version."<br/>n";

    $tmp_object = new stdClass;
    $tmp_object->str_attr = 'test';
    $tmp_object->int_attr = 123;

    $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
    echo "Store data in the cache (data will expire in 10 seconds)<br/>n";

    $get_result = $memcache->get('key');
    echo "Data from the cache:<br/>n";

    var_dump($get_result);

    ?>

    显示结果:

    Server's version: 1.2.6
    Store data in the cache (data will expire in 10 seconds)
    Data from the cache:

    object(stdClass)[3]  public 'str_attr' => string 'test' (length=4)  public 'int_attr' => int 123

    著名的PHPCMS同样支持Memcached扩展:

    <?php
    //MemCache服务器配置
    //define('MEMCACHE_HOST', 'localhost'); //MemCache服务器主机
    //define('MEMCACHE_PORT', 11211); //MemCache服务器端口
    //define('MEMCACHE_TIMEOUT', 1); //S,MemCache服务器连接超时
    class cache{
    var $memcache;
    function __construct()    {
    $this->memcache = &new Memcache;
    $this->memcache->pconnect(MEMCACHE_HOST, MEMCACHE_PORT, MEMCACHE_TIMEOUT);
    }
    function cache()    {
    $this->__construct();
    }
    function get($name)
    {
    return $this->memcache->get($name);
    }
    function set($name, $value, $ttl = 0)
    {
    return $this->memcache->set($name, $value, 0, $ttl);
    }
    function rm($name)
    {
    return $this->memcache->delete($name);
    }
    function clear()
    {
    return $this->memcache->flush();
    }
    }
    ?>

  • 相关阅读:
    播放m3u文件时不能时时更新的问题
    Oracle视图详解
    Oracle视图的作用与安全性
    Ext GridPanel 表头合并
    [AJAX] 001 AJAX核心操作
    [Java] 系统环境变量配置
    [AJAX] 002 AJAX异步验证
    判断文章/帖子操作权限
    让Tee 7.x版本和FastReport 3.x版本共存
    mysql基本语句
  • 原文地址:https://www.cnblogs.com/sung/p/5863354.html
Copyright © 2011-2022 走看看