• php的Memcached模块扩展


    Memcached模块介绍

          Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

          通俗了说就是让客户端的nginx请求去memcached服务器获取缓存数据,而不用连接数据库。若请求的数据memcached没有,nginx会去连接数据库获取数据,同时php会将请求的url作为key,数据作为value的形式存储一份到memcached,用于之后的资源获取。

    安装介绍

    我使用非root用户进行此次安装,故很多命令涉及到sudo赋权
    Memcached模块加载将从以下四点来实现

    1. 安装nginx+php
    2. Memcached服务器的安装
    3. php端Memcache模块扩展
    4. 测试页面获取
    

    用到两台虚拟机

    10.1.1.1 centos7.5 Memcached服务器
    10.1.1.2 centos7.5 nginx+php+Memcache模块

    安装nginx+php

    请参考以下链接 https://www.cnblogs.com/huandada/p/10114722.html
    注:在php编译时要加上--with-config-file-path=/usr/local/php/etc 参数,不然php找不到配置路径,在本文最后会详讲此处报错。

    Memcached服务器的安装(10.1.1.1)

    下载yum源

    cd /etc/yum.repos.d/
    sudo wget http://mirrors.aliyun.com/repo/Centos-7.repo
    sudo wget http://mirrors.aliyun.com/repo/epel-7.repo
    

    安装套件与依赖包

    sudo yum install -y apr* autoconf automake bison cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng* libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* libX* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils ppl telnet t1lib t1lib* nasm nasm* wget zlib-devel gmp-devel
    

    安装libevent
    Memcached要用到libevent库来进行Socket处理

    sudo yum install -y  libevent libevent-devel
    

    安装memcached

    wget http://www.memcached.org/files/memcached-1.4.25.tar.gz
    tar -xvf memcached-1.4.25.tar.gz
    ./configure --prefix=/usr/local/memcached
    sudo make
    sudo make install
    sudo ln -s /usr/local/memcached/bin/memcached   /usr/local/bin/memcached
    

    创建mecached用户

    sudo groupadd memcached 
    sudo useradd -g memcached memcached -s /bin/nologin
    

    启动memcached服务

    sudo /usr/local/bin/memcached -d -m 4096 -p 11211 -u memcached
    

    停止memcached服务
    sudo killall memcached

    服务启动参数说明

    -d 选项是启动一个守护进程,
    -m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB
    -u 是运行Memcache的用户,也可以是root
    -l 是监听的服务器IP地址,默认应该是本机
    -p 是设置Memcache监听的端口,默认是11211
    -c 选项是最大运行的并发连接数,默认是1024
    -P 是设置保存Memcache的pid文件位置
    -h 打印帮助信息
    -v 输出警告和错误信息
    -vv 打印客户端的请求和返回信息
    

    Memcached操作key/value的几种基本命令

    set
    add
    replace
    get
    delete
    

    用法

    command <key> <flags> <expiration time> <bytes>
    <value>
    参数说明如下:
    command set/add/replace
    key     key 用于查找缓存值
    flags     可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
    expiration time     在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    bytes     在缓存中存储的字节点
    value     存储的值(始终位于第二行)
    

    首先连接11211端口,得到交互界面,用quit结束交互

    telnet 127.0.0.1 11211 
    set user 0 600 2        #设置key为user,flag 0,存储600s,占用2个字节
    yh                              #value为yh
    
    get user                    #根据key user搜索对应的value值
    yh
    
    quit                            #退出
    

    php端Memcache模块扩展(10.1.1.2)

    下载memcache软件包(不是memcached)

    wget http://pecl.php.net/get/memcache-2.2.7.tgz
    tar -xvf memcache-2.2.7.tgz
    

    phpize是一个脚本,用来扩展php扩展模块的,通过phpize可以建立php的外挂模块

    cd memcache-2.2.7 
    /usr/local/php/bin/phpize 
    

    ./configure --with-php-config=/usr/local/php/bin/php-config
    sudo make
    

    执行make install 可以得到扩展模块所在路径(注:每台机子路径不一样,请使用你得到的路径)

    sudo make install
    

    查看模块文件

    ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
    -rwxr-xr-x 1 root root 291144 Dec 27 15:18 memcache.so
    

    在php.ini中添加扩展模块,php.ini文件可以从源码包cp到编译所定义的配置文件路径下

    sudo  cp /home/xx/php-5.6.39/php.ini-development /usr/local/php/etc/php.ini
    sudo vim /usr/local/php/etc/php.ini
    extension=/你的扩展模块路径/memcache.so    #添加此行
    

    配置nginx.conf

    sudo vim /usr/local/nginx/conf/nginx.conf
    #增加以下配置
    location / {
         #设置key
         set $memcached_key "$uri";
         #根据key查找对应的服务器
         memcached_pass 10.2.8.70:11211;
         #出错的时候回调php,查找数据库中的数据
         error_page 404 /callback.php;
        }
    

    重启服务

    sudo killall php-fpm
    sudo /usr/local/php/sbin/php-fpm 
    sudo killall nginx
    sudo /usr/local/nginx/sbin/nginx
    

    查看模块是否加载

    sudo vim  /usr/local/nginx/html/info.php
    <?php
        phpinfo()
    ?>    
    

    查看页面http:ip:80/info.php,有如下内容,即加载成功

    测试

    添加测试页面

    sudo vim /usr/local/nginx/html/callback.php
    <?php
    $mem = new memcache;
    $mem->connect ('10.2.8.70', 11211);
    $mem->set('test','hello world!', 0, 12);
    $val = $mem->get('test');
    echo $val;
    ?>
    

    访问http:ip:80/callback.php
    得到 hello world!

    配置完成

    错点梳理

    1. php的memcache扩展部分sudo /usr/local/php/bin/phpize报错
      Cannot find config.m4........
      解决思路:memcached-1.4.25.tar.gz包不对,换个包memcache-2.2.7.tgz就好了

    2. cp php.ini文件添加模块后,phpinfo()页面没有memcache模块
      解决思路:
      查看phpinfo页面发现没有配置文件路径

      在php编译时加上--with-config-file-path=/usr/local/php/etc 参数

      重启php-fpm,问题解决

    3. 访问页面测试报错
      解决思路
      phpinfo()页面或 sudo /usr/local/php/bin/php -m查看php是否加载该模块,若没有加载,可能是php.ini文件没生效,没生效的原因就是以上第2点。

  • 相关阅读:
    将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
    hive基本结构与数据存储
    使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决
    Sqoop导入关系数据库到Hive
    SVN版本回退
    SVN--分支、合并
    关于SVN版本分支合并的知识
    在spring环境下集成ActiveMQ
    ActiveMQ
    Oracle中sequence的使用方法
  • 原文地址:https://www.cnblogs.com/huandada/p/10184241.html
Copyright © 2020-2023  润新知