共计 4278 个字符,预计需要花费 11 分钟才能阅读完成。
服务端部署
第一个里程碑:安装依赖关系
Memcache 用到了 libevent 这个库用于 Socket 的处理。
[root@nfs01 ~]# yum install libevent libevent-devel nc -y第二个里程碑:安装 memcache
[root@nfs01 ~]# yum install memcached -y[root@nfs01 ~]# which memcached/usr/bin/memcached第三个里程碑:启动 memcached服务
[root@nfs01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192[root@nfs01 ~]# lsof -i :11211COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmemcached 10796 root 26u IPv4 85717 0t0 TCP *:memcache (LISTEN)memcached 10796 root 27u IPv6 85718 0t0 TCP *:memcache (LISTEN)memcached 10796 root 28u IPv4 85721 0t0 UDP *:memcachememcached 10796 root 29u IPv6 85722 0t0 UDP *:memcache[root@nfs01 ~]# netstat -lntup |grep memcatcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10796/memcached tcp 0 0 :::11211 :::* LISTEN 10796/memcached udp 0 0 0.0.0.0:11211 0.0.0.0:* 10796/memcached udp 0 0 :::11211 :::* 10796/memcached注:memcached可以同时启动多个实例,端口不一致即可。
[root@nfs01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192第四个里程碑:写入开机自启动
echo 'memcached -m 16m -p 11211 -d -u root -c 8192' >>/etc/rc.local客户端部署(web 服务器)
第一个里程碑:安装 PHP memcache 扩展插件
命令集如下:
cd /server/toolswget http://pecl.php.net/get/memcache-2.2.7.tgztar xf memcache-2.2.7.tgzcd memcache-2.2.7/application/php/bin/phpize./configure -enable-memcache --with-php-config=/application/php/bin/php-configmake && make install完整操作过程:
[root@web01 ~]# cd /server/tools/[root@web01 tools]# wget http://pecl.php.net/get/memcache-2.2.7.tgz[root@web01 tools]# tar xf memcache-2.2.7.tgz[root@web01 tools]# cd memcache-2.2.7[root@web01 memcache-2.2.7]# /application/php/bin/phpizeConfiguring for:PHP Api Version: 20121113Zend Module Api No: 20121212Zend Extension Api No: 220121212[root@web01 memcache-2.2.7]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config[root@web01 memcache-2.2.7]# make && make install查看是否安装成功
[root@web01 memcache-2.2.7]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-20121212/total 252-rwxr-xr-x 1 root root 258048 Nov 7 10:03 memcache.somemcache.so表示插件安装成功。
第二个里程碑:配置 memcache客户端使其生效
[root@web01 memcache-2.2.7]# cd /application/php/lib/[root@web01 lib]# vim php.ini……[root@web01 lib]# tail -2 php.iniextension_dir = "/application/php/lib/php/extensions/no-debug-non-zts-20121212/"extension = memcache.so第三个里程碑:检测语法,重启服务
[root@web01 lib]# /application/php/sbin/php-fpm -t[07-Nov-2017 10:20:44] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful#重启服务
killall php-fpmkillall php-fpm/application/php/sbin/php-fpm浏览器 访问 phpinfo 页面出现 memcache信息表示配置成功。
第四个里程碑:编写测试 memcache文件
[root@web01 blog]# cat test_memcache.php<?php $memcache = new Memcache; $memcache->connect('172.16.1.31', 11211) or die ("Could not connect NFS server"); $memcache->set('key', 'Memcache connect OK'); $get = $memcache->get('key'); echo $get;?>测试出现 Memcache connect OK 表示连接成功
[root@web01 blog]# /application/php/bin/php test_memcache.php Memcache connect OK第五个里程碑:修改 php配置 ( 设置 session共享)
[root@web01 ~]# vim /application/php/lib/php.ini原配置
session.save_handler = filessession.save_path = "/tmp"修改为:
session.save_handler = memcachesession.save_path = "tcp://172.16.1.31:11211"⚠修改完成之后要重启 php 服务
killall php-fpmkillall php-fpm/application/php/sbin/php-fpm修改之前 phpinfo信息

修改之后 phpinfo信息

到此企业级 memcache(session 共享)部署完毕
1.1.1 Memcached 在集群中 session 共享存储的优缺点
优点:
1)读写速度上会比普通文件 files 速度快很多。
2)可以解决多个服务器共用 session 的难题。
缺点:
1)session 数据都保存在 memory 中,持久化方面有所欠缺,但对 session 数据来说不是问题。
2)一般是单台,如果部署多台,多台之间数据无法同步。通过 hash 算法分配依然有 session 丢失的问题。
替代方案:
1)可以用其他的持久化系统存储 session,例如 redis,ttserver 来替代 memcached.
2)高性能并发场景,cookies 效率比 session 要好很多, 因此, 大网站都会用 cookies 解决会话共享的问题.
3)一些不好的方法:lvs-p,nginx ip_hash, 不推荐使用.
DedeCMS 使用 memcache 问题
问题: 上述文件进行修改后,DedeCMS 发现无法访问后台 http://www.linuxidc.com/dede解决办法:
修改文件一:
[root@web01 include]# pwd/application/nginx/html/www/include[root@web01 include]# vim common.inc.php135 //Session保存路径136 $enkey = substr(md5(substr($cfg_cookie_encode,0,5)),0,10);137 //$sessSavePath = DEDEDATA."/sessions_{$enkey}";138 $sessSavePath = "tcp://172.16.1.31:11211";139 if (!is_dir($sessSavePath) ) mkdir($sessSavePath);修改文件二:
[root@web01 include]# vim vdimgck.php24 $enkey = substr(md5(substr($cfg_cookie_encode,0,5)),0,10);25 //$sessSavePath = DEDEDATA."/sessions_{$enkey}";26 $sessSavePath = "tcp://172.16.1.31:11211";27 if (!is_dir($sessSavePath) ) mkdir($sessSavePath);让 DedeCMS 直接使用 memcache 的共享. 解决问题.
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148422.htm






