Session保存到Memcache

通常地  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']='www.i007xd.com';
//session_destroy();
echo $_SESSION['007'];
var_dump($mem->get('i3pa9v2usiem3svj0ga4apvbc3'));
?>
相關文章
相關標籤/搜索