• Memcached安装配置及访问


    1.Memcached键值对访问,对于网页来说,key需要使用uri。

    2.Memcached的相关配置

    memcached:缓存服务器,但本身无法决定缓存任何数据
    	一半依赖于客户端,一半依赖于服务端
    	memcached最小缓存48bytes,最大缓存1MB
    					 
    	buddy system:伙伴系统
    		避免内存外碎片,页面之间的碎片整合
    slab allocate:slab分配器 避免内存内碎片,小于页面单位(4K)的数据结构中,提前分配好这些小的单元,这些小的单元不会回收。slab为所有的需要的结构都定义了。
    memcached也是按照这样来使用的。最小48bytes,使用增长因子来定义growth factor。 48bytes:slab class,slab chunk 80bytes
    memcached:分布式缓存服务器 一致性哈希算法:设置一个环,数据为1-2^32,采用HASH算法,均衡放置几台服务器在这个环上,每次获取的数据都按照顺时针取环上临近服务器。 http://memcached.org/ 采用事件驱动的形式,需要安装lib-event模块:http://libevent.org/ ./configure --prefix=/usr/local/libevent make && make install ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent make && make install memcached关键参数: -p: TCP port,11211 -m: 以M为单位指定memcached可以使用的最大内存空间,默认64MB -c: 最大支持的并发连接数,默认为1024 -t: 处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效 -f: 设定slab allocator定义预分配的增长因子 -M:当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间 -n: 最小存储单位是多大slab trunk,默认是48bytes,可以设置比48bytes小 -S:启动SASL进行用户认证 -d: 运行在后台
         Memcached的启动: /usr/local/memcached/bin/memcached -m 128 -n 20 -f 1.1 -vv -u nobody -d netstat -tunlp add mykey 0 30 5 hello STORED get mykey VALUE mykey 0 5 hello END memcached客户端,就是telnet交互 memcached客户端库: php memcache memcached cc++ libmemcached memcached的图形化管理工具 memadmin http://www.php.net/downloads.php

    3.下载memcache的客户端程序http://pecl.php.net/get/memcache-2.2.4.tgz

      解压执行

    [root@nginx memcache-2.2.4]# /usr/local/php/bin/phpize 
    Configuring for:
    PHP Api Version:         20151012
    Zend Module Api No:      20151012
    Zend Extension Api No:   320151012

      后来在安装过程中发现memcache在php7的版本中有str和string的变化,故而不用memcache这个版本了,改用memcached。

      github上的链接为https://github.com/php-memcached-dev/php-memcached,选择的时候注意branch要选择php7

      要安装php-memcached-php7需要先安装libmemcached,http://libmemcached.org/libMemcached.html

      编译安装libmemcached-1.0.18的时候报错

    libmemcached/auto.cc: In function 'memcached_return_t text_incr_decr(memcached_server_st*, bool, const char*, size_t, uint64_t, bool)':
    libmemcached/auto.cc:73: error: expected `)' before 'PRIu64'
    
    In file included from ./libmemcached/common.h:72,
                     from ./libmemcached/csl/common.h:40,
                     from libmemcached/csl/context.cc:38:
    ./libmemcached-1.0/memcached.h:46:27: error: tr1/cinttypes: No such file or directory

      原因是gcc的版本过低了,需要升级版本

    # yum install gcc44 gcc44-c++ libstdc++44-devel
    
    # export CC=/usr/bin/gcc44
    # export CXX=/usr/bin/g++44
    # ./configure

      安装好libmemcached之后,重新编译安装php-memcached-php7

    [root@nginx php-memcached-php7]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
    make && make install

     [root@nginx php-memcached-php7]# make install
     Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/

      至此memcached for php7的客户端安装成功,记录下安装路径,/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/。

      修改配置文件,在编译的时候指定的路径/usr/local/php/etc/目录下面的php.ini文件中添加一行:

    extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/memcached.so"

      然后使用/usr/local/php/sbin/php-fpm -m可以查看到memcached模块,访问index.php,查看到memcached组件。

     4.在/etc/init.d/下添加memcached的启动脚本

    #!/bin/bash
    
    . /etc/rc.d/init.d/functions
    
    PORT="11211"
    USER="nobody"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS=""
    
    [ -f /etc/sysconfig/memcached ] && . /etc/sysconfig/memcached
    
    RETVAL=0
    prog="/usr/local/memcached/bin/memcached"
    desc="Distributed memory caching"
    lockfile="/var/lock/subsys/memcached"
    
    start(){
                    echo -n $"Starting $desc (memcached):"
                    daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE $OPTIONS
                    RETVAL=$?
                    echo 
                    [ $RETVAL -eq 0 ] && touch $lockfile
                    return $RETVAL
    }
    
    stop(){
                    echo -n $"Shutting down $desc (memcached):"
                    killproc $prog
                    RETVAL=$?
                    echo 
                    [ $RETVAL -eq 0 ] && rm -f $lockfile
                    return $RETVAL
    }
    
    
    restart(){
                    stop
                    start
    }
    
    
    reload(){
                    echo -n $"Reloading $desc ($prog):"
                    killproc $prog -HUP
                    RETVAL=$?
                    echo 
                    return $RETVAL
    }
    
    case "$1" in
        start)
                    start
                    ;;
        stop)
                    stop
                    ;;
        restart)
                    restart
                    ;;
        reload)
                    reload
                    ;;
    esac
    exit $RETVAL

      添加到服务启动中去,需要在!#/bin/bash中添加下面两行

    # chkconfig: 2345 10 90
    # description: memcached service ....
    
    
    chkconfig --add memcached

      

      

  • 相关阅读:
    ~虚拟现实论文~
    Vega Prime Distributed 模块的中文总结
    怎样在程序中使用vgPicker移动物体
    黑客档案
    在VBA中连接SQL SERVER数据库
    VC中调用Matlab引擎的设置
    在VB应用程序中单击按钮打开word文档
    matlab调用ansys的方法
    实现VC与Matcom的接口步骤
    vega编程中文资料
  • 原文地址:https://www.cnblogs.com/python-study/p/6054717.html
Copyright © 2020-2023  润新知