您的位置:首页 > 数据库 > Redis

Redis替代文件存储session

2016-02-21 20:48 851 查看
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了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: