前面也講到了用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用到的變量並初始化
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等方法
//開啟session
public static function start(Memcache $memcache){
//首先將屬性初始化
self::init($memcache); //調用handler,以後調用handler時都是用memcache
session_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;
}
但要判斷傳入的out 參數是否有值,有值就返回out的數據
public static function read($PHPSESSID){
$out=self::$handler->get(self::session_key($PHPSESSID)); //得到該下標輸出的數據
if($out===false || $out ==null){
return ''; //out得到數據沒有,返回空
}
return $out; //返回得到的數據
}
返回自身的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;
}
private static function session_key($PHPSESSID){
$session_key=self::NS.$PHPSESSID; //鍵值為自身和傳進來的phpsessid
return $session_key;
}
結果顯示
如果成功,在telnet中顯示


表示session數據信息儲存到memcache成功