主页 > Cache | PHP | WEB开发 > web做集群时,利用memcache来同步session

web做集群时,利用memcache来同步session

2011 年 12 月 16 日 一条评论

记得以前做集群服务时,同步session的问题有些时候是借助COOKIE来使用的,有些时候是通过共享文件的方式来做,最多的还是通过memcache来做,不过之前做得跟以下讲得很不一样,以前的做法是完全不用PHP自带的session,而是借助memcache的缓存原理来实现一个memcache,这样子做当然是可以的!但是今天讲得是一种更简单的额方法。我个人觉得用memcache来同步session是最好的。
首先我模拟了一个web集群的,我启动两个memcached进程:

# /usr/local/bin/memcached -d -p 11211 -u root -m 64 -c 1024 -P /var/run/memcached/memcached1.pid
# /usr/local/bin/memcached -d -p 11212 -u root -m 64 -c 1024 -P /var/run/memcached/memcached2.pid

这样子服务算是简单的启动了,下面配置下php.ini这个文件

session.save_handler = "memcache"
memcache.hash_strategy = "consistent"  #这个memcache在php.ini中配置项,还有很多,可以根据phpinfo里面来看它的配置项
session.save_path = "tcp://127.0.0.1:11211?weight=1,tcp://127.0.0.1:11212?weight=2"

简单的说明:
第一行,session的储存方式是memcache;第二行,memcache的hash算法是consistent;第三行,session储存的位置;
然后重启php-fpm

#  /etc/rc.d/init.d/php-fpm stop
#  /etc/rc.d/init.d/php-fpm start

此时你查看phpinfo页面的关于session的信息如下:
Session Support enabled
Registered save handlers files user sqlite memcache
Registered serializer handlers php php_binary
紧接着下面是
session.save_path tcp://127.0.0.1:11211?weight=1,tcp://127.0.0.1:11212?weight=2 tcp://127.0.0.1:11211?weight=1,tcp://127.0.0.1:11212?weight=2

测试下成不成功:

<?php
session_start();
$_SESSION['sessionTestData'] = 'fbbin code!';
echo session_id();
?>

通过memcache来获取刚刚存得数据

<?php  
$mem = new Memcache;  
$mem->addServer("127.0.0.1",11212)or die ("Could not add server 11212");  
$mem->addServer("127.0.0.1",11211)or die ("Could not add server 11211");  
$val = $mem->get('ind40dbsjobtq2k8lnfmv5eps5');    //上面输出的session_id()
echo $val;  
?> 

得出的结果是:

sessionTestData|s:12:"fbbin code!";

测试成功!关于这个时间的有效性跟session和memcache有关系。

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>