服务端部署

第一个里程碑:安装依赖关系

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  -d -u root -c
[root@nfs01 ~]# lsof -i :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached root 26u IPv4 0t0 TCP *:memcache (LISTEN)
memcached root 27u IPv6 0t0 TCP *:memcache (LISTEN)
memcached root 28u IPv4 0t0 UDP *:memcache
memcached root 29u IPv6 0t0 UDP *:memcache
[root@nfs01 ~]# netstat -lntup |grep memca
tcp 0.0.0.0: 0.0.0.0:* LISTEN /memcached
tcp ::: :::* LISTEN /memcached
udp 0.0.0.0: 0.0.0.0:* /memcached
udp ::: :::* /memcached

注:memcached可以同时启动多个实例,端口不一致即可。

[root@nfs01 ~]# memcached -m 16m -p  -d -u root -c 

    参数说明:

参数

参数说明

-m

max memory to use for items in megabytes (default: 64 MB)

-p

TCP port number to listen on (default: 11211)

-d

run as a daemon

-u

assume identity of <username> (only when run as root)

-c

max simultaneous connections (default: 1024)

   第四个里程碑:写入开机自启动

 echo 'memcached -m 16m -p 11211 -d -u root -c 8192' >>/etc/rc.local

客户端部署(web服务器)

第一个里程碑:安装PHP memcache 扩展插件

命令集如下:

 cd /server/tools
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar xf memcache-2.2..tgz
cd memcache-2.2.
/application/php/bin/phpize
./configure -enable-memcache --with-php-config=/application/php/bin/php-config
make && 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..tgz
[root@web01 tools]# cd memcache-2.2. [root@web01 memcache-2.2.]# /application/php/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
[root@web01 memcache-2.2.]# ./configure -enable-memcache --with-php-config=/application/php/bin/php-config
[root@web01 memcache-2.2.]# make && make install

查看是否安装成功

 [root@web01 memcache-2.2.]# ls -l /application/php/lib/php/extensions/no-debug-non-zts-/
total -rwxr-xr-x root root Nov : memcache.so

   memcache.so表示插件安装成功。

第二个里程碑:配置memcache客户端使其生效

 [root@web01 memcache-2.2.]# cd /application/php/lib/
[root@web01 lib]# vim php.ini
……
[root@web01 lib]# tail - php.ini
extension_dir = "/application/php/lib/php/extensions/no-debug-non-zts-20121212/"
extension = memcache.so

第三个里程碑:检测语法,重启服务

 [root@web01 lib]# /application/php/sbin/php-fpm  -t
[-Nov- ::] NOTICE: configuration file /application/php-5.5./etc/php-fpm.conf test is successful

#重启服务 

 killall php-fpm
killall 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', ) 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 = files
session.save_path = "/tmp"

修改为:

 session.save_handler = memcache
session.save_path = "tcp://172.16.1.31:11211"

⚠修改完成之后要重启php服务

 killall php-fpm
killall 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.etiantia.org/dede

解决办法:

修改文件一:

 [root@web01 include]# pwd
/application/nginx/html/www/include [root@web01 include]# vim common.inc.php
//Session保存路径
$enkey = substr(md5(substr($cfg_cookie_encode,,)),,);
//$sessSavePath = DEDEDATA."/sessions_{$enkey}";
$sessSavePath = "tcp://172.16.1.31:11211";
if ( !is_dir($sessSavePath) ) mkdir($sessSavePath);

修改文件二:

 [root@web01 include]# vim vdimgck.php
$enkey = substr(md5(substr($cfg_cookie_encode,,)),,);
//$sessSavePath = DEDEDATA."/sessions_{$enkey}";
$sessSavePath = "tcp://172.16.1.31:11211";
if ( !is_dir($sessSavePath) ) mkdir($sessSavePath);

让DedeCMS直接使用memcache的共享.解决问题.

特别感谢:元芳

此文章出自惨绿少年,转载请注明 

最新文章

  1. mysql5.7压缩包版安装-来自百度经验
  2. android studio用法笔记
  3. [游戏模版18] Win32 五子棋
  4. viewpage广告条的制作
  5. Matlab安装
  6. hibernate 中id生成策略
  7. python学习_应用pickle模块封装和拆封数据对象
  8. Context
  9. 应用SecureCRT(发送接收文件)
  10. chrome实现全浏览器跨域ajax请求
  11. Interpolator(插值器)的种类
  12. C#设计模式:责任链模式
  13. .Net Core版开源跨平台框架SkyMallCore
  14. [Swift]LeetCode1033. 移动石子直到连续 | Moving Stones Until Consecutive
  15. Linux之cp、rm、mv
  16. 设置这个属性,progress就可以变成和背景一起的了
  17. Mac系统下编译支持Android平台的最新X264编码器
  18. STL stack 容器
  19. THE CUSTOMISER
  20. It is the courage

热门文章

  1. 开博近一年的感想 by 程序员小白
  2. Linux入门之常用命令(3)
  3. Oracle第一波
  4. netty4.x 传输文件
  5. 悟透JavaScript(二)
  6. Oracle虚拟机VirtualBox安装成功后的注意事项
  7. ICommand.CanExecuteChanged事件订阅对象的变化
  8. IBatis.Net 老技术新研究
  9. json生成方式
  10. Loadrunner Webservice接口性能测试脚本编写优化总结