php之session最优将信息写入memcache中管理

前面也讲到了用memcache存储数据信息缓存的方法和好处,这样能够减少访问数据库的次数,,减少访问量大时对数据库的压力

将session存储到memcache中管理需要了解memcache、session的使用和session_set_save_handler()

同样先编写一个公用的类,当然采用静态的成员方法

memcache 指令用telnet操作

同样现在根目录下建立需要用到的文件

其中memsession.class.php 是公用的memcache存储类文件,one.php、two.php和three.php是测试文件,items.php 是输出数据数组的

session.class.php中:

首先定义连接memcache用到的变量并初始化

<?phpclass MemSession{private static $handler=null;private static $lifetime=null;private static $time=null;const NS='session_'; //定义下标     ... ...}    $memcache=new Memcache;    //连接memcache    $memcache->connect("localhost",11211) or die("could not connect");    MemSession::start($memcache);

注意的是 NS 为常量,定义下标

再初始化方法

//初始化方法private static function init($handler){self::$handler=$handler;self::$lifetime=ini_get('session.gc_maxlifetime');self::$time=time();}

开启session,并定义调用本类中的open、close等方法

//开启sessionpublic static function start(Memcache $memcache){//首先将属性初始化self::init($memcache); //调用handler,以后调用handler时都是用memcachesession_set_save_handler(array(__CLASS__,'open'),//调用本类的open方法array(__CLASS__,'close'),array(__CLASS__,'read'),array(__CLASS__,'write'),array(__CLASS__,'destroy'),array(__CLASS__,'gc'));//调用session_start()session_start();}接下来就是定义上面调用的这些方法

open() 和 close() 只要返回真就可以,但 open() 的参数为 路径(path) 和 名称(name)

public static function open($path, $name){return true;}public static function close(){return true;}read() 只需要有PHPSESSID参数即可

但要判断传入的out 参数是否有值,有值就返回out的数据

public static function read($PHPSESSID){$out=self::$handler->get(self::session_key($PHPSESSID)); //得到该下标输出的数据if($out===false || $out ==null){return ''; //out得到数据没有,返回空}return $out; //返回得到的数据}write() :

返回自身的id,数据,和生命时长

public static function write($PHPSESSID, $data){//判断是否有数据$method=$data ? 'set' : 'relpace';return self::$handler->$method(self::session_key($PHPSESSID), $data, MEMCACHE_COMPRESSED, self::$lifetime);}

destroy() 和 gc() :

destroy()调用自身的delete方法

public static function destroy($PHPSESSID){return self::$handler->delete(self::session_key($PHPSESSID)); //调用delete方法}public static function gc($lifetime){return true;}接下来需要定义一个传入PHPSESSID的方法

private static function session_key($PHPSESSID){$session_key=self::NS.$PHPSESSID; //键值为自身和传进来的phpsessidreturn $session_key;}

结果显示

如果成功,在telnet中显示

表示session数据信息储存到memcache成功

那里面非常漂亮,个个观景区都能看到奇形怪状的岩石。

php之session最优将信息写入memcache中管理

相关文章:

你感兴趣的文章:

标签云: