centos7 编译安装Memcached

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


安装Memcached前的环境配置:

Linux: CentOS Linux release 7.4.1708 (Core)

Mysql:10.2.11-MariaDB

Nginx:nginx/1.10.2

Php:   PHP 7.2.1


安装 Memcached服务:

Linux系统安装memcached,首先要先安装libevent库
[root@localhost ~]# yum -y install libevent libevent-devel

memcached官网: http://memcached.org/ 下载最新版本的memcached源代码包:
[root@localhost ~]# wget http://memcached.org/files/memcached-1.5.4.tar.gz
[root@localhost ~]# mv memcached-1.5.4.tar.gz /usr/local/src/
[root@localhost ~]# cd /usr/local/src/
[root@localhost ~]# tar -zxvf memcached-1.5.4.tar.gz
[root@localhost ~]# cd memcached-1.5.4/
[root@localhost memcached-1.5.4]# ./configure --prefix=/usr/local/memcached
[root@localhost memcached-1.5.4]# make
[root@localhost memcached-1.5.4]# make test
[root@localhost memcached-1.5.4]# make install

启动memcached服务:
[root@localhost memcached-1.5.4]# ln -s /usr/local/memcached/bin/memcached /usr/local/bin/
[root@localhost memcached-1.5.4]# memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached
或者:/usr/local/memcached/bin/memcached -d -m 64 -u root -l 127.0.0.100 -p 11211 -c 128 -P /tmp/memcached.pid

参数说明:
-d选项是启动一个守护进程,
-m是分配给Memcached使用的内存数量,单位是MB,这里是10MB,
-u是运行Memcached的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,由于是本地开发( 非实际运行环境 )这里指定了服务器的IP地址127.0.0.1,
-p是设置Memcached监听的端口,这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定,
-P是设置保存Memcached的pid文件,这里是保存在 /tmp/memcached.pid。

验证安装:
[root@bogon memcached-1.5.4]# memcached -h
会输出memcached服务版本及一些帮助信息

检查memcached是否启动成功:
[root@localhost memcached-1.5.4]# ps -ef|grep memcached
root 7042 1 0 22:44 ? 00:00:00 memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached
root 7227 3164 0 22:56 pts/0 00:00:00 grep --color=auto memcached

或者:
[root@localhost memcached-1.5.4]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0            0 127.0.0.1:11211         0.0.0.0:*               LISTEN     
tcp        0            0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0            0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0            0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0            0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0            0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0            0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0            0 127.0.0.1:9000          0.0.0.0:*               LISTEN     
tcp        0            0 192.168.31.132:22    192.168.31.1:51299      ESTABLISHED
tcp6       0            0 :::3306                      :::*               LISTEN     
tcp6       0            0 :::111                       :::*               LISTEN     
tcp6       0            0 :::22                        :::*               LISTEN     
tcp6       0            0 ::1:631                      :::*               LISTEN     
tcp6       0            0 ::1:25                       :::*               LISTEN

出现类似这样的结果 tcp 0 0 88.88.88.88:11211 0.0.0.0:* LISTEN11211端口已经打开,说明Memcached已正常启动。

====至此,我们将Memcached服务配置完毕,接着我们配置PHP的扩展,以便在程序中来调用====



安装Memcached的php扩展:

        PHP有两种Memcached扩展,老一点的叫memcache,新一点的叫memcached。

        centos7版本中,开始安装memcache(https://pecl.php.net/package/memcache),下载的memcache-3.0.8.tgz,配置过后,在编译时候一直报错fatal error: ext/standard/php_smart_str.h: No such file or directory#include "ext/standard/php_smart_str.h",网上查了很多,很多解释是Php7本身的问题,某些扩展未做到位。在php5中可以正常编译安装,php7不可以,拷贝更改名字后,重新编译也不能解决问题。

[root@localhost ~]# wget http://pecl.php.net/get/memcache-3.0.8.tgz
[root@localhost ~]# mv memcache-3.0.8.tgz /usr/local/src/
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# tar -zxvf memcache-3.0.8.tgz
[root@localhost src]# cd memcache-3.0.8/
[root@localhost memcache-3.0.8]# find / -name php-config
/usr/local/src/php-7.2.1/scripts/php-config
/usr/local/php7/bin/php-config
[root@localhost memcache-3.0.8]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
[root@localhost memcache-3.0.8]# ./configure --enable-memcache --with-php-config=/usr/local/php7/bin/php-config
[root@localhost memcache-3.0.8]# make && make install
/usr/local/src/memcache-3.0.8/memcache_pool.h:45:47: 致命错误:ext/standard/php_smart_str_public.h:没有那个文件或目录
#include "ext/standard/php_smart_str_public.h"

编译中断。
make: *** [memcache.lo] 错误 1

这是因为低版本中的 php_smart_str_public.h 文件在 php7 中被修改并重命名为 php_smart_string_public.h,直接重命名文件无法解决问题。

        http://cjwen.com/2017/03/22/php7%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95%E6%8A%A5php_smart_str_public-h%E6%96%87%E4%BB%B6%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/ 


        最后找到一个memcached的可行安装方法,并安装成功。直接到 github 上克隆 php7 的 php-memcached 扩展。

配置memcached的时候,会提示 configure: error: no, libmemcached sasl support is not enabled. 
Run configure with --disable-memcached-sasl to disable this check,如果没有的话就需要提前安装该 libmemcached。

libMemcached官网:http://libmemcached.org/libMemcached.html    
[root@localhost src]# wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
[root@localhost src] # tar -zxvf libmemcached-1.0.18.tar.gz
[root@localhost src] # cd libmemcached-1.0.18/
[root@localhost libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached
[root@localhost libmemcached-1.0.18]# make && make install
[root@localhost libmemcached-1.0.18]# find / -name libmemcached  
/usr/share/doc/man-pages-overrides-7.4.3/libmemcached
/usr/local/src/libmemcached-1.0.18/libmemcached
/usr/local/libmemcached
/usr/local/libmemcached/include/libmemcached

[root@localhost src]# git clone [root@localhost src]# cd php-memcached
[root@localhost src]# cd php-memcached
[root@localhost php-memcached]# git checkout php7
[root@localhost php-memcached]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
[root@localhost php-memcached]# ./configure --with-php-config=/usr/local/php7/bin/php-config 
--with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
[root@localhost php-memcached]# make
[root@localhost php-memcached]# make test
[root@localhost php-memcached]# make install

php添加该扩展:

编辑 php.ini文件:添加 : extension=memcached.so
[root@localhost php-memcached]# vim /etc/php.ini
注意:实际修改 的是 phpinfo:Loaded Configuration File 参数所加载的php.ini文件地址

[root@localhost php-memcached]# vim /usr/local/php7/etc/php.ini
[memcached]
extension=memcached.so

重新启动php.ini
[root@localhost phpredis]# systemctl restart  php-fpm.service

查看扩展是否已经添加:
[root@localhost php-memcached]# /usr/local/php7/bin/php -m
或者phpinfo() 查看

php添加memcached扩展完成!!!

冷暖自知一抹茶ck


创建 test.php 测试:

$memcache = new Memcached;
$memcaches = $memcache->addServer('127.0.0.1','11211');
if ($memcaches) {
    $memcache->set("str_keys", "String to store in memcached");
    $memcache->set("num_key", 123);
    $object = new StdClass;
    $object->sex = '111';
    $memcache->set("obj_key", $object);
    $array = Array('assoc'=>123, 345, 567);
    $memcache->set("arr_key", $array);
    var_dump($memcache->get('str_keys'));   //字符串
    var_dump($memcache->get('num_key'));    //数字
    var_dump($memcache->get('obj_key'));    //对象
    var_dump($memcache->get('arr_key'));    //数组
}
else {
    echo "Connection to memcached failed";
}

冷暖自知一抹茶ck



冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论