eaccelerator 应用之“使用共享内存存储Session”

本文转自: http://www.zhongguowen.com/blog/?p=74

eaccelerator的功能除了对php预编译代码进行优化、缓存之外,还提供了php开发下的共享内存操作、session内存存储、内容缓存等功能。
php默认的session存储方式是在磁盘,虽然可以配置php生成的文件目录到内存盘中,但最终还是需要依赖于文件系统,势必产生文件操纵的开销。当网站并发请求很高的时候,还会产生另为一个性能问题:session目录下的文件数目过多,达到操纵系统瓶颈,虽然这时也可以通过配置为多级目录,但依旧无法摆脱文件系统的魔爪。
“session.save_path = "N;/path"”
eaccelerator专门针对PHP的这个Session存储效率问题,通过使用共享内存技术为我们提供了高效的解决方案。注意,要启用对session支持,再编译安装eaccelerator时需要启用-with-eaccelerator-sessions选项,例如:
./configure --with-php-config=/usr/local/bin/php-config --enable-eaccelerator=shared --with-eaccelerator-shared-memory --with-eaccelerator-sessions --with-eaccelerator-content-caching --with-eaccelerator-disassembler --with-eaccelerator-debug
然后我们便可以在php.ini中修改配置来启用它:
session.save_handler = eaccelerator
最后重启apache,并执行如下测试:session.php

<?php
</span></span>
<
span style="color:#080000">/**
* new session hander test.
* by lowell from <a href="http://www.zhongguowen.com" class="bb-url"><a href="http://www.zhongguowen.com">www.zhongguowen.com</a></a>
*/
</span>
<
span style="color:#616100">if</span><span style="color:#066000"><span style="font-weight:bold">(</span></span>!<a href="http://www.php.net/function_exists" class="bb-url"><span style="color:#006600">function_exists</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#ff0000">"eaccelerator_set_session_handlers"</span><span style="color:#066000"><span style="font-weight:bold">)</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>
<
span style="color:#066000"><span style="font-weight:bold">{</span></span>
    <
a href="http://www.php.net/die" class="bb-url"><span style="color:#006600">die</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#ff0000">"eaccelerator is in trouble!"</span><span style="color:#066000"><span style="font-weight:bold">)</span></span>;
<
span style="color:#066000"><span style="font-weight:bold">}</span></span>
   
<
span style="color:#616100">switch</span><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#00ff00">$_GET</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"act"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>
<
span style="color:#066000"><span style="font-weight:bold">{</span></span>
    <
span style="color:#616100">case</span> <span style="color:#ff0000">"logout"</span>:
        <
a href="http://www.php.net/session_unset" class="bb-url"><span style="color:#006600">session_unset</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>;
        <
a href="http://www.php.net/session_destroy" class="bb-url"><span style="color:#006600">session_destroy</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>;
        <
a href="http://www.php.net/header" class="bb-url"><span style="color:#006600">header</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#ff0000">"Location: "</span> . <span style="color:#00ff00">$_SERVER</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"PHP_SELF"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>;
        <
span style="color:#616100">break</span>;    <span style="color:#616100">case</span> <span style="color:#ff0000">"login"</span>:
        <
span style="color:#00ff00">$_SESSION</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"user"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span> = <span style="color:#ff0000">"Lowell Zhong"</span>;
        <
a href="http://www.php.net/header" class="bb-url"><span style="color:#006600">header</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#ff0000">"Location: "</span> . <span style="color:#00ff00">$_SERVER</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"PHP_SELF"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span>;
        <
span style="color:#616100">break</span>;
<
span style="color:#066000"><span style="font-weight:bold">}</span></span>
<
span style="color:#616100">if</span><span style="color:#066000"><span style="font-weight:bold">(</span></span><a href="http://www.php.net/isset" class="bb-url"><span style="color:#006600">isset</span></a><span style="color:#066000"><span style="font-weight:bold">(</span></span><span style="color:#00ff00">$_SESSION</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"user"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span><span style="color:#066000"><span style="font-weight:bold">)</span></span> && <span style="color:#00ff00">$_SESSION</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"user"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span> != <span style="color:#ff0000">""</span><span style="color:#066000"><span style="font-weight:bold">)</span></span>
<
span style="color:#066000"><span style="font-weight:bold">{</span></span>
    <
a href="http://www.php.net/echo" class="bb-url"><span style="color:#006600">echo</span></a> <span style="color:#ff0000">"Welcome <strong>"</span> . <span style="color:#00ff00">$_SESSION</span><span style="color:#066000"><span style="font-weight:bold">[</span></span><span style="color:#ff0000">"user"</span><span style="color:#066000"><span style="font-weight:bold">]</span></span> . <span style="color:#ff0000">"</strong> [<a href=<span style="color:#009900"><span style="font-weight:bold">\"</span></span>?act=logout<span style="color:#009900"><span style="font-weight:bold">\"</span></span>>logout</a>]<span style="color:#009900"><span style="font-weight:bold">\n</span></span>"</span>;
<span style="color:#066000"><span style="font-weight:bold">}</span></span><span style="color:#616100">else</span><span style="color:#066000"><span style="font-weight:bold">{</span></span>
    <
a href="http://www.php.net/echo" class="bb-url"><span style="color:#006600">echo</span></a> <span style="color:#ff0000">"<a href=<span style="color:#009900"><span style="font-weight:bold">\"</span></span>?act=login<span style="color:#009900"><span style="font-weight:bold">\"</span></span>>Click me</a> for logining"</span>;
<span style="color:#066000"><span style="font-weight:bold">}</span></span>
<
span style="color:#000000"><span style="font-weight:bold">
?>

这里再推荐另外还一个php session的共享内存存储模块:http://www.ossp.org/pkg/lib/mm/