Redis替代文件存储session

php默认使用文件存储session,如果并发量大,效率会非常低。而redis对高并发的支持非常好,可以利用redis替换文件来存储session。

php存数session主要用到了session_set_save_handler.

在使用session_set_save_handler之前,先把php.ini配置文件的session.save_hadler选项设置为user

<?php
class SessionManager{
private $redis;
private $sessionSavePath;
private $sessionName;
private $sessionExpireTime=30;

public function __construct(){
    $this->redis = new Redis();
    $this->redis->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")
    );
    session_start();
}

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

public function close(){
    return true;
}

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

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

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

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

public function __destruct(){
    session_write_close();
}

}
?>

sessionManager构造函数主要用来连接redis服务器,使用session_set_slave_handler函数并设置session回调函数,并调用session_start函数开启session功能。使用时,只需要包含sessionManager类,然后实例化一个sessionManager对象。下面是一个管理session的实例。session_set.php代码如下:

<?php
    include('SessionManager.php');
    new SessionManager();
    $_SESSION['username'] = 'captain';
?>

下面是读取session的代码.session_get.php代码如下:

<?php
    include('SessionManager.php');
    new SessionManager();
    echo $_SESSION['username'];
?>

分别访问session_set.php和session_get.php页面,我们会发现,已经可以成功的设置和获取session了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值