今天一直在研究如何将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
  我们经常使用ports来安装程序,ports中的make命令还可以有很多的功能,今天我将它可以带有的参数列出来,供大家参考使用。
引用
fetch - Retrieves ${DISTFILES} (and ${PATCHFILES} if defined) into ${DISTDIR} as necessary.
fetch-list - Show list of files that would be retrieved by fetch.
fetch-recursive - Retrieves ${DISTFILES} (and ${PATCHFILES} if defined), for port and dependencies into ${DISTDIR} as necessary.
fetch-recursive-list - Show list of files that would be retrieved by fetch-recursive.

fetch-required - Retrieves ${DISTFILES} (and ${PATCHFILES} if defined), for port and dependencies that are not already installed into ${DISTDIR}.
all-depends-list - Show all directories which are dependencies for this port.
build-depends-list - Show all directories which are build-dependencies for this port.
package-depends-list - Show all directories which are package-dependencies for this port.
run-depends-list - Show all directories which are run-dependencies for this port.
extract - Unpacks ${DISTFILES} into ${WRKDIR}.
patch - Apply any provided patches to the source.
configure - Runs either GNU configure, one or more local configure scripts or nothing, depending on what's available.
build - Actually compile the sources.
install - 安装编译结果.
reinstall - 安装编译结果,忽略“已经安装”错误.
deinstall - 卸载这个安装.
deinstall-all - Remove all installations with the same PKGORIGIN.
package - Create a package from an _installed_ port.
package-recursive - Create a package for a port and _all_ of its dependancies.
describe - Try to generate a one-line description for each port for use in INDEX files and the like.
checkpatch - Do a "patch -C" instead of a "patch". Note that it may give incorrect results if multiple patches deal with the same file.
checksum - Use distinfo to ensure that your distfiles are valid.
checksum-recursive - Run checksum in this port and all dependencies.
makesum - Generate distinfo (only do this for your own ports!).
clean - Remove ${WRKDIR} and other temporary files used for building.
clean-depends - Do a "make clean" for all dependencies.
config - Configure options for this port (using ${DIALOG}). Automatically run prior to extract, patch, configure, build, install, and package.
showconfig - 显示这个port的config选项
rmconfig - 从这个port移除config选项



现在ArthurXF本人正在搞PHP等技术培训,如果想学习的人可以跟我联系。另外培训的招生简章在这个网址,想了解的可以去看看。加我QQ:29011218交流也可。
PHP培训招生简章
Tags: , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]