程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php之session最優將信息寫入memcache中管理

php之session最優將信息寫入memcache中管理

編輯:關於PHP編程

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用到的變量並初始化

 

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;
    	}

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; //鍵值為自身和傳進來的phpsessid

    		return $session_key;
    	}

 

 

 

結果顯示

如果成功,在telnet中顯示

\

 

\

 

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

 


 

 

 

 

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved