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();
    }
    }
    ?>

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/sung/p/5863354.html
Copyright © 2011-2022 走看看