首頁 > 後端開發 > php教程 > session儲存的替代方法redis

session儲存的替代方法redis

WBOY
發布: 2016-07-30 13:31:56
原創
1060 人瀏覽過

php預設使用檔案儲存session,如果並發量大,效率非常低。而redis對高並發的支援非常好,所以,可以使用redis替代檔來儲存session。
這裡,介紹下php的session_set_save_handler 函數的功能與使用方法。此函數定義使用者級session保存函數(如開啟、關閉、寫入等)。原型如下:

<code>bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
</code>
登入後複製

在使用函數前,先把php.ini設定檔的session.save_handler選項設為user,否則session_set_save_handle 不會生效。

下面是使用redis儲存session的一個實例。

寫一個session管理類別sessionManager ,程式碼如下:

<code><?php

class SessionManager {
    private $reids;
    private $sessionSavePath;
    private $sessionName;
    private $sessi

    public function __construct() {
        $this->reids=new Redis();
        $this->reids->connect('127.0.0.1',6379);

        $retval=session_set_save_handler(
            array($this,"open"),
            array($this,"close"),
            array($this,"read"),
            array($this,"write"),
            array($this,"destroy"),
            array($this,"gc")
        );
}

public function open($path,$name) {
    return true;
}

public function close() {
    return true;
}

public function read($id) {
    $vale=$this->reids->get($id);
    if($vale) {
        return $vale;
    }else {
        return '';
    }
}

public function write($id,$data) {
    if($this->reids->set($id,$data)) {
        $this->reids->expire($id,$this->sessionExpireTime);
        return true;
    }
    return false;
}

public function destroy($id) {
    if($this->reids->delete($id)) {
        return true;
    }
    return false;
}

public function gc($maxlifetime) {
    return true;
}

    public function __destruct() {
        session_write_close();
    }
}

?>
</code>
登入後複製

SessionManager建構子主要用來連接Redis伺服器,使用session_set_save_handler函數設定session回呼函數,並呼叫session_start函數開啟session函數。因為本例中open、close和gc回呼函數的作用不是很大,所以直接傳回true。
在write回呼函數中,以session id 作為key,把session的資料作為value儲存到redis伺服器,設定session的過期時間為300秒。在read回呼函數重,以session ID 以key從redis伺服器讀取數據,並傳回此數據。而在destroy回呼函數重,則以session ID 作為key 從redis伺服器中刪除對應的session資料。

使用時,只需包含SessionManager類,然後實例化一個SessionManager物件。下面建立個session_set.php檔。輸入程式碼

<code><?php
    include("SessionManager.php");
    new SessionManager(); //开启session管理
    $_SESSION['username']='hezikuang';//创建session变量
?>
</code>
登入後複製

然後再建立一個session_get.php文件,輸入如下程式碼:

<code><?php
    include("SessionManager.php");
    new SessionManager(); //开启session管理
    echo $_SESSION['username'];
?>
</code>
登入後複製

可以存取session_get.php,看看是否成功。

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了session儲存的替代方法redis,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板