php memcache集群中的session
admin 发布于:2014-1-9 8:56 分类:系统架构 有 2819 人浏览,获得评论 0 条 标签: session memcache
传统的session是以文件形式存储于服务器端的,但是当处于集群环境时,客户端访问的可能是任意服务器中的一台,也就是说不一定此时session文件就存在于此台服务器上,自然也就访问不到session了。
过去的解决办法一般是通过数据库来存储session的方式来解决,这样就可以实现跨服务器的session共享了,但与之而来的问题就是对数据库频繁访问所造成的问题了。
所以我们要用memcache来解决这个问题!
1.首先安装memcache,以及memcache在php中的扩展
2.修改php.ini文件
session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211″
或者memcached
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
或者在php代码里面实现
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', 'tcp://192.168.0.1:10001?persistent=1&weight=1&timeout=1&retry_interval=15,tcp://192.168.0.2:10002?persistent=1&weight=1&timeout=1&retry_interval=15');
session_start();
使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,类似这样的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″ 。
3.大功告成,重启apache和memcache看看phpinfo里的session配置是不是变成了memcache了。
memcache 集群不用怎么设置直接用:
addServer($ip,$port);addServer($ip,$port);
addServer($ip,$port);
memcached 集群不用怎么设置直接用:
$m = new Memcached();
$servers = array(
array('mem1.domain.com', 11211, 33),
array('mem2.domain.com', 11211, 67)
);
$m->addServers($servers);
demo 页面一
<?php
session_start();
$_SESSION['TEST'] = time();
$_SESSION['TEST2'] = 'test2';
echo session_id();
$mem = new Memcache();
$mem->addServer('127.0.0.1',11211);
$mem->addServer('localhost',11211);
echo '<hr>';
print_r($mem->get(session_id()));
?>
<a href="./memcache-session2.php" target="_balnk">页面2</a>
demo 页面二
<?php
session_start();
print_r($_SESSION);
结果:正确
注:memcached 方式
ini_set("session.save_handler", "memcached"); // 是memcached不是memcache
ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:
1.在session的存储服务器上安装 redis
2,修改php.ini配置
- session.save_handler = redis
- session.save_path = "tcp://127.0.0.1:6379"
3,查看redis的php扩展
四,session存储到redis中测试
- <?php
- session_start();
- $_SESSION['redis'] = "aaaaaa";
- echo session_id();
- echo "<br>";
- echo $_SESSION['redis'];
- echo "<br>";
- $redis = new redis();
- $redis->connect('127.0.0.1', 6379);
- echo $redis->get("PHPREDIS_SESSION:".session_id());
- ?>