龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php Session保存到Memcache

时间:2014-07-16 16:02来源:网络整理 作者:网络 点击:
分享到:
Session保存到Memcache 一般地 session 是以文本文件形式存储在服务器端的。如果使用 seesion或者该 PHP 文件 要调用 session 变量那么就必须在调用 session 之前启动它,使用 session_start() 函数。其

一般地 session 是以文本文件形式存储在服务器端的。如果使用 seesion或者该 PHP 文件 要调用 session 变量 那么就必须在调用 session 之前启动它,使用 session_start() 函数。其它 都不需要你设置了 PHP 自动完成 session 文件的创建。其默认 session 的存放路径是服务器 的系统临时文件夹,可以使用ini_set('session.save_path','路径');来设置session的存放路径。

但是如果碰到大数据量的sesstion的时候,使用基于文件的session存取瓶颈可能都是在磁盘IO 操作上,现在利用memcached来保存session数据,直接通过内存的方式,效率自然能够提高不 少。在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session 时会比较方便,将 这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。 其缺点是 session 数据都保存在 memory 中,一旦当机,数据将会丢失。但对 session 数据来 说并不是严重的问题,其本身就是临时性数据。

<?php
class MS{
    static $mem;
    static $maxtime;

    function __construct($mem){
        self::$mem = $mem;
        self::$maxtime = ini_get('session.gc_maxlifetime');
        session_module_name('user');//session文件保存方式,这个是必须的!除非在Php.ini文件中设置了

        session_set_save_handler(
            array(__CLASS__,'open'),//在运行session_start()时执行
            array(__CLASS__,'close'),//在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行
            array(__CLASS__,'read'),//在运行session_start()时执行,因为在session_start时,会去read当前session数据
            array(__CLASS__,'write'),//此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行
            array(__CLASS__,'destroy'),//在运行session_destroy()时执行
            array(__CLASS__,'gc')//执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc
        );
        session_start();//这也是必须的,打开session,必须在session_set_save_handler后面执行
    }

    static function open($sid){
        return true;
    }
    static function close(){
        return true;
    }

    static function read($sid){
        return self::$mem->get($sid);
    }

    function write($sid,$data){
        return self::$mem->set($sid,$data,MEMCACHE_COMPRESSED,self::$maxtime); 
    }

    function destroy($sid){
        return self::$mem->delete($sid);
    }

    function gc($maxtime){
        return true;
    }
}
$mem=new Memcache();
$mem->connect('127.0.0.1', '11211');
$session=new MS($mem);
$_SESSION['007']='outofmemory.cn
//session_destroy();
echo $_SESSION['007'];
var_dump($mem->get('i3pa9v2usiem3svj0ga4apvbc3'));
?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接