PHP如何将session保存到memcached中?如何分布式保存PHP session
2015-01-30 00:00
1001 查看
session_set_save_handler无关的memcached保存session的方法
在memcached服务器上
1)下载memcached
#wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz 2)由于memcached依赖libevent所以需要先安装libevent库,这里直接yum安装
#yum install *libevent*
3)安装memcached
#./configure --prefix=/usr/local/memcached
#make
#make install
4)启动memcached
#/usr/local/memcached/bin/memcached -d -m 4096 -p 11211 -u root
-d daemon ?-p port -u ?user -m memory
在web server服务器上
5)在web server上安装php的memcache模块
#/usr/local/php/bin/pecl install memcache
Enable memcache session handler support? [yes] : yes(这里选择yes)
6)在php.ini中加入如下内容:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
7)修改php.ini中的session.save_handler及session.save_path为如下内容:
session.save_handler = memcache
session.save_path = "tcp://memcached服务器ip:11211"
亦可在PHP程序中
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', 'tcp://memcached服务器ip:11211');
注意:这种使用memcached保存session的方式与session_set_save_handler无关
安装完memcached之后
在php.ini中
将session.save_handler 修改为memcache,并修改save_path指向memcached的地址和端口即可
session.save_handler = memcache
session.save_path = tcp://127.0.0.1:11211
memcache的PECL这个扩展非常强大,可以支持failover以及分布存储。
使用方法很简单,只需要在session.save_path的参数列表中,使用逗号分隔各个memcached服务器,如:
session.save_path = "tcp://172.16.8.81:11211,tcp://172.16.8.82:11211,tcp://172.16.8.83:11211"
则保存的session会经过hash之后保存到各个memcached服务器中,而hash的算法memcache支持两种,crc32以及fnv:
memcache.hash_function= {crc32,fnv}
文档中很少有提到fnv算法的,据说其散列要比crc32更好,但是我通过以下小小的程序实验之后,发现仍旧是crc32的散列算法分布的更加平均。
<?php ini_set("memcache.hash_function", "crc32"); $memcache = new Memcache; $memcache1 = new Memcache; $memcache2 = new Memcache; $memcache->addServer('localhost', 11211); $memcache->addServer('localhost', 11212); $memcache->flush(); $memcache1->connect('localhost', 11211); $memcache2->connect('localhost', 11212); $fp1 = fopen("mem1.txt", "w"); $fp2 = fopen("mem2.txt", "w"); for ($i = 0; $i < 1000; $i++) { $memcache->set($i, $i, 0, 1000); fwrite($fp1, $memcache1->get($i) . " "); fwrite($fp2, $memcache2->get($i) . " "); } fclose($fp1); fclose($fp2);
相关文章推荐
- PHP如何将session保存到memcached中?如何分布式保存PHP session
- PHP memcached session保存在memcached中(分布式服务器共享session)
- 如何使用数据库实现PHP保存session
- PHP中如何使用session实现保存用户登录信息
- 如何将PHP中SESSION部分数据保存
- memcached安装配置及保存php session于memcached
- php中如何同时使用session和cookie来保存用户登录信息
- PHP中如何使用session实现保存用户登录信息
- Memcached的安装配置及将PHP的session保存在Memcached中
- memcached安装配置及保存php session于memcached中的方法
- php session保存到memcache或者memcached中
- 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
- 如何设置memcached来共享php的session
- 如何将PHP session信息缓存到memcached里面
- php中如何同时使用session和cookie来保存用户登录信息
- 利用memcached在多台服务器之间共享PHP的session数据
- PHP中如何保持SESSION以及由此引发的一些思考
- PHP-数据库保存session
- PHP中如何保持SESSION以及由此引发的一些思考
- 如何在PHP中保持SESSION以及由此引发的一些思考