Redis应用——使用Redis存储Session

来源:互联网 发布:xmanager连接linux图形 编辑:程序博客网 时间:2024/04/28 22:03
PHP默认使用文件存储Session,但如果并发量很大,效率非常低。而Redis对高并发的支持非常好,所以,可以使用Redis替代文件存储Session。

在讲解实例之前,先了解PHP的session_set_save_handler()函数的作用和使用方法。该函数可以设置用户级别的Session处理函数(如打开、写入、修改、删除等)。
session_set_save_handler ( callable$open , callable$close , callable$read , callable$write , callable$destroy , callable$gc )
该函数的返回值为布尔类型。

注意:在使用该函数之前,先把php.ini配置文件的session_save_handler选项的值设置为 user,否则session_set_save_handler()函数不会生效。

编写一个Session管理类SessionManager.php文件,代码如下:
注意:该类中我们实例化了一个Redis对象来操作Redis内存数据库,但PHP中默认是没有安装redis的扩展,故我们需要先安装phpredis扩展,安装方法可参考:http://blog.csdn.net/lamp_yang_3533/article/details/52555111

类中的构造函数主要用来连接Redis服务器,使用session_set_save_handler()函数设置自定义的Session处理函数,并调用session_start()函数开启session。由于本例中的open、close和gc回调函数的作用不是很大,所以直接返回true。

在write回调函数中,以sessionid作为key,把session数据作为value存储到Redis内存数据库,设置session的过期时间为1800秒。在read回调函数中,以sessionid作为key从Redis服务器中读取数据,并返回此数据。而在destroy回调函数中,则以sessionid作为key从Redis服务器中删除对应的session数据。

使用时只需包含SessionManager类,然后实例化一个SessionManager对象。下面的例子就是使用SessionManager来管理session,这里我们创建一个session_set.php文件演示如何写入session,代码如下:
然后,再创建一个session_get.php,演示如何读取session,代码如下:
测试时,先访问session_set.php,再访问session_get.php。从测试结果可以看出,Session变量能够实现跨页面访问,说明SessionManager能够正常工作。另外,我们可以通过sessionid从Redis内存数据库中查询到相关的session数据。

0 0