php 的 session 会话默认时以文件形式保存在 php.ini 配置文件设置的会话缓存目录,文件保存会话的效率很低,每当每个用户登录一次就会在服务器上生成一个唯一的 session_id 文件,当用户登录量达到几十万级别的时候,就会有几十万个文件在服务器生成,这时候磁盘的会话目录的 IO 读写会非常的慢,导致用户登录时程序会花费大量的时间在会话文件的读写上.当大量的用户登录时读写能力不够,导致的文件是会被第一个操作 session 的进程锁定,其他请求阻塞.请求会挂起在 session_start() 直到 session 文件解锁.这时候就需要优化登录慢的问题了.
由于锁定的 session 文件直到脚本执行结束或者 session 正常关闭才会解锁,为了防止大量的 php 请求(需要使用 $_SESSION 数据)被锁定,可以在写完 session 后马上关闭,这样就释放了锁.
// 开启会话
session_start();
// 写入会话
$_SESSION['is_login']=1;
// 写入会话后关闭上一个会话文件的写入
session_write_close();
php session 会话写入到 redis
redis 数据时存储在计算机内存条中运行的,计算机的内存条的速写速度时硬盘的几十倍,所以如果把 php session 写入到 redis 缓存中,速度会提高很多.配置方法:
// 方式一,在 php 脚本中设置更改 php 会话写入方式
ini_set("session.save_handler","redis");
ini_set("session.save_path","tcp://127.0.0.1:6379");
// 如果有密码
ini_set("session.save_path","tcp://127.0.0.1:6379?auth=password");
>
// 修改 php 的配置文件 php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
// 如果有密码
session.save_path = "tcp://127.0.0.1:6379?auth=password"
来源: http://www.bubuko.com/infodetail-2472706.html