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,直接重命名文件无法解决问题。
最后找到一个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扩展完成!!!
创建 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"; }
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn