Linux下用memcached来作PHP的session.save_handler

转载 2011年01月10日 16:36:00

转自:http://blog.csdn.net/kyn/archive/2009/05/10/4164118.aspx
最近我的网站访问在直线上升,因为动态会员游戏网站,一直在想办法做些优化,今天想到如果把php的session放在内存,可能会提升网站的访问速度。于是开始搜索资料。经过一天的摸索,终于搞定。问题主要出在php有两个memcache模块,一个是php-memcache,一个是php-memcached,php-memcached是最新的,也是比较稳定的,网上的资料都是关于php-memcache的,而没有提到php-memcached,而php-memcached的配置跟php-memcache是有所不同的。大致的整个安装过程:

1、安装libevent  1.4.10

wget http://monkey.org/~provos/libevent-1.4.10-stable.tar.gz

tar xzvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.10-stable

./configure --prefix=/usr
make && make install

2、安装memcached1.2.8

wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

tar -zxvf  memcached-1.2.8.tar.gz

cd memcached-1.2.8
./configure --with-libevent=/usr

make && make install

3、安装zlib

wget http://www.zlib.net/zlib-1.2.3.tar.gz

tar -zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr --shared
make && make install

4、安装libmemcached

wget http://download.tangent.org/libmemcached-0.26.tar.gz

tar zxvf libmemcached-0.26.tar.gz

cd libmemcached-0.26
./configure --prefix=/usr/local/libmemcached/

make && make install

5、安装php-memcached模块

wget http://pecl.php.net/get/memcached

tar -zxvf  memcached-0.1.5.tgz

cd  memcached-0.1.5

phpize
./configure --with-php-config=/usr/bin/php-config --enable-memcache --with-libmemcached-dir=/usr/local/libmemcached

make && make install

6、启动memcached
/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d
注意:如果 -l 为127.0.0.1则只能在localhost访问memcache,如果想让其他ip的访问,-l需要设置为其实际的ip
-p 使用的TCP端口。默认为11211
-m 最大内存大小。默认为64M
-vv 用very vrebose模式启动,调试信息和错误输出到控制台
-d 作为daemon在后台启动
-c 最大运行的并发连接数,默认是1024,按照服务器的负载量来设定
-P 设置保存Memcache的pid文件
-l 监听的服务器IP地址,如果有多个地址的话
-u 运行Memcache的用户,默认不能用root启动,所以当前用户为root用户时,需要用-u参数来指定
 
执行后,可以用以下办法查看执行状态

telnet 127.0.0.1 11211
stats
STAT pid 11568
STAT uptime 5910
STAT time 1241876672
STAT version 1.2.8
STAT pointer_size 32
STAT rusage_user 0.751885
STAT rusage_system 1.584759
STAT curr_items 2615
STAT total_items 36753
STAT bytes 244835
STAT curr_connections 3
STAT total_connections 18427
STAT connection_structures 36
STAT cmd_flush 0
STAT cmd_get 18388
STAT cmd_set 38334
STAT get_hits 15717
STAT get_misses 2671
STAT evictions 0
STAT bytes_read 4924864
STAT bytes_written 1992526
STAT limit_maxbytes 134217728
STAT threads 2
STAT accepting_conns 1
STAT listen_disabled_num 0
END
有以上信息(详细中文解释见尾部)出现,表明启动成功!

7、加入开机启动

nano /etc/rc.d/local.d
加一行

/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d

8、编辑php.ini

nano /etc/php.ini

在文件最后加入:

extension = "memcached.so"
修改
session.save_handler = files  -> session.save_handler = memcached
session.save_path = "/var/lib/php/session" -> session.save_path = "127.0.0.1:11211"

9、重启apache

service httpd restart

大功告成!

需要注意的地方主要有3点:
1、安装libmemcached需用到zlib,我机器没有这个,花了很多时间找编译libmemcached时出错的原因。
2、php.ini文件的配置,php-memcached模块跟php-memcache不同,要设成是memcached,这个在phpinfo页面的Registered save handlers可以看到。如果设置不正确,会有"Cannot find save handler memcache"的错误提示。
3、session.save_path几乎所有的资料都是session.save_path = "tcp://127.0.0.1:11211",但这可能在memcaceh是这样用的,我没有验证,我一开始也是这样设置,但一直出现"Failed to write session data (memcached)"的错误,找了很入也没找到是什么原因,后来在php.net上找到session.save_path string  Defines a comma separated of hostname:port entries to use for session server pool, for example "sess1:11211, sess2:11211".
这段说明,于是去掉"tcp://"再试,才终于成功!

最后:因为网站一直在运行的,建议先不要直接动php.ini,而是用一个php文件来测试
<?
ini_set("session.save_handler","memcached");
ini_set("session.save_path","127.0.0.1:11211");

session_start();
if (!isset($_SESSION['TEST'])) {
 $_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>
只要这个文件没有出现错误提示了,就可以直接修改php.ini相应的内容,然后重启apache,就样就不影响会员访问网站。

========================================
memcached服务器stats状态解释:
pid: memcached服务进程的进程ID
uptime: memcached服务从启动到当前所经过的时间,单位是秒。
time: memcached服务器所在主机当前系统的时间,单位是秒。
version: memcached组件的版本。这里是我当前使用的1.2.6。
pointer_size: 服务器所在主机操作系统的指针大小,一般为32或64.
curr_items: 表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
total_items: 表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
bytes: 表示系统存储缓存对象所使用的存储空间,单位为字节。
curr_connections: 表示当前系统打开的连接数。
total_connections: 表示从memcached服务启动到当前时间,系统打开过的连接的总数。
connection_structures: 表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具 体什么意思,我目前还没搞明白。
cmd_get: 累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象 测试了2次。
cmd_set: 累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
get_hits: 表示获取数据成功的次数。
get_misses: 表示获取数据失败的次数。
evictions: 为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
bytes_read: memcached服务器从网络读取的总的字节数。
bytes_written: memcached服务器发送到网络的总的字节数。
limit_maxbytes: memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动 memcached服务设置的大小一致。
threads: 被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。

自定义方式保存session到文件

/** * 自定义方式保存session到文件 * 使用session_set_save_handler 函数 * php.ini 设置 * 默认为session.save_handler =...
  • ysydao
  • ysydao
  • 2016年11月19日 21:13
  • 689

php的session机制以及自定义会话管理器

如果需要在数据库中或者以其他方式存储会话数据, 需要使用 session_set_save_handler() 函数来创建一系列用户级存储函数。 PHP 5.4.0 之后,你可以使用 Sessio...
  • sole_cc
  • sole_cc
  • 2014年10月01日 15:38
  • 723

centos5.2用memcache 来作PHP 的session.save_handler

最近我的网站访问在直线上升,因为动态会员游戏网站,一直在想办法做些优化,今天想到如果把php的session放在内存,可能会提升网站的访问速度。于是开始搜索资料。经过一天的摸索,终于搞定。问题主要出在...
  • kyn
  • kyn
  • 2009年05月09日 21:24
  • 5691

memcache PHP 的 session.save_handler

也就是可以直接用 memcache 来作 PHP 的 session.save_handler。 1. 安装 memcached,还是那套 ./configure; make; make ins...

php session_set_save_handler 函数的用法(file)

以下只是介绍一些函数的简单用法: void session_set_save_handler (string open, string close, string read, string writ...

php session_set_save_handler 函数的用法(mysql)

解析php session_set_save_handler 函数的用法(将session存在数据库中的方法)

详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结

写在前面: 最近几天一直做nginx的负载均衡,折腾了将近一周,在网上查了很多资料,终于在今天将一系列的流程及功能跑通。在学习的过程中,发现网上大多数资料都写的很笼统,或者就是写的让新手迷迷糊糊,似懂...

linux下nginx+tomcat+msm+memcached实现session共享(测试)

测试机器:192.168.18.207, 192.168.18.208,192.168.18.209 软件配置: 192.168.18.207 nginx/1.9.4   ...
  • Baple
  • Baple
  • 2016年07月01日 12:54
  • 753

session_set_save_handler

http://topic.csdn.net/u/20081127/14/23222d65-0ac1-4446-b898-69bda2fb901f.html sessi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下用memcached来作PHP的session.save_handler
举报原因:
原因补充:

(最多只允许输入30个字)