今天一直在研究如何将session保存到内存中去,我们先说一下为什么要把session保存到内存中去,有什么好处呢?
  因为如果我们的php程序中设置了session_start(),那么每个访问此文件的人都会产生一个session文件存在系统缓存中/tmp目录下,我们经常写的购物车或者会员系统经常要使用到session,所以如果一个流量很大的网站或者session保存时间设置很长的网站,就会在/tmp目录下建立大量session文件,虽然有时候这些文件大小仅仅为0,可是它确实还是占用了一个文件句柄,我有一台服务器因为设置的保存时间太长了,结果产生了120多万个session,占用了硬盘所有的文件句柄,导致再也不能建立新文件了,我用了35个小时来删除这120多万个session,只要你设置了session_start(),服务器会根据用户本地的cookie查找session的值,如果有保存session文件那么取回session的值,如果没有那么新建立一个session文件。可想而知,在120多万个文件中查找你要的文件,是多么恐怖的事情啊,我用ll命令等几分钟都没反应呢,所以太多的session文件势必造成系统运行缓慢,所以我想把session保存到内存中去,这样就可以大大加快session的读写速度,还可以减少硬盘的损耗,两全其美啊。哈哈
  我找到了很多文章说使用MM一个session使用共享内存的模块可以做这个工作,刚好ports里面也有,我就安装了一下,而且还按照说明重新编译了php,并且把php.ini的session.save_handler = files改成了session.save_handler = mm,结果我不管怎么调用还是抱错说找不到save_handler mm,这可愁死我了,搞了一个早上,也没找出问题所在。因为MM测试未成功,我这里就不提供MM的安装步骤了。
  结果我在察看phpinfo的时候,偶尔在session那段发现了Registered save handlers = files user eaccelerator ,呵呵,原来是我安装了eaccelerator,可能它和mm不能共存吧。我把session.save_handler = eaccelerator,重起apache后,运行正常。去/tmp下察看,确实不在生成新的session文件了,哈哈!
  另外需要提醒大家一点的就是,虽然session保存到内存中有种种好处,但是如果使用apachectl restart,那么内存中的session会丢失哦,所以不要动不动就重起apache。呵呵!
  不知道eaccelerator和不会安装eaccelerator的,请到这里来看我写的关于eaccelerator的安装方法!http://www.bizeway.net/read.php/29.htm
PHP | 评论(0) | 引用(0) | 阅读(18406)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]