redis 替代php文件存储session的实例
redis 替代php文件存储session的实例
本文实例讲述了PHP使用Redis替代文件存储Session的方法。分享给大家供大家参考,具体如下:
查看实例之前请先了解 PHP session_set_save_handler函数的用法
PHP默认使用文件存储session,如果并发量大,效率非常低。而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session。
定义个SessionManager 类
这里,介绍下php的session_set_save_handler
函数的作用和使用方法。该函数定义用户级session保存函数。
class SessionManager { private $redis; public function __construct(){ $this-redis = new Redis(); $this-redis-connect('192.168.0.102', 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){ $session_value = $this-redis-get($id); if($session_value){ return $session_value; }else{ return ""; } } public function write($id,$data){ if($this-redis-set($id,$data)){ return true; }else{ return false; } } public function destroy($id){ if($this-redis-delete($id)){ return true; }else{ return false; } } public function gc($maxlifetime){ return true; } public function __destruct(){ session_write_close(); }}
bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
创建一个session_set.php 代码如下
session_set_save_handler 函数各参数作用如下表
include("SessionManager.php");new SessionManager();$_SESSION['user_name']="xxdcsnd@sina.com";
参 数
创建一个session_set.php 代码如下
描述
include("SessionManager.php");new SessionManager();echo $_SESSION['user_name'];
open
当session打开时调用此函数。接收两个参数,第一个参数是保持session的路径,第二个参数是session的名字
close 当session操作完成时调用此函数。不接收参数。 read 以session
ID作为参数。通过session
ID从数据存储方中取得数据,并返回此数据。如果数据为空,可以返回一个空字符串。此函数在调用session_start
前被触发
write 当数据存储时调用。有两个参数,一个是session
ID,另外一个是session的数据 destroy
当调用session_destroy
函数时触发destroy函数。只有一个参数 session ID gc
当php执行session垃圾回收机制时触发
测试输出 结果 xxdcsnd@sina.com
在使用该函数前,先把php.ini配置文件的session.save_handler选项设置为user,否则session_set_save_handle 不会生效。