一、PHP 配置 Redis 保存 Session
1. 安装 Redis 与扩展
-
安装 Redis 服务端
参考官网/包管理器启动 Redis(如:sudo apt install redis-server)。
-
安装 PHP Redis 扩展
建议用 phpredis 扩展,安装命令如下:
# 对于 Debian/Ubuntu
sudo apt install php-redis
# 或源码编译
pecl install redis
2. 修改 PHP 配置
编辑你的 php.ini 文件(可用 php --ini 查到当前环境生效的 php.ini)。
; session 保存方式为 redis
session.save_handler = redis
; Redis 连接地址(单台 redis 服务)
session.save_path = "tcp://127.0.0.1:6379"
; (可选,指定多个 Redis ���例实现高可用)
; session.save_path = "tcp://10.0.0.1:6379,tcp://10.0.0.2:6379"
补充:如果 Redis 需要密码,可这样配置
session.save_path = "tcp://127.0.0.1:6379?auth=你的密码"
3. 代码中和往常 session 用法一致
session_start();
$_SESSION['user_id'] = 10086;
echo $_SESSION['user_id'];
你无需更改任何其它 session 操作代码(如 set、get、unset 等),底层会自动将 session 数据通过 redis 存储与读取。
二、扩展:Redis Session 与 PHP 原生 Session 的对比
| 特性 |
PHP 原生文件 Session |
Redis Session |
| 存储方式 |
文件系统(如 /tmp 目录) |
内存数据库 Redis |
| 访问速度 |
较慢(受磁盘 I/O 限制) |
极快(基于内存,网络传输也很快) |
| 分布式支持 |
天生不支持,多机访问不共享 |
原生支持,Session 可被多台主机访问共享 |
| 持久性/可靠性 |
依赖磁盘,不易丢失 |
默认在内存中,可配置持久化策略 |
| 并发能力 |
高并发下易锁冲突(Flock) |
Redis 原生支持高并发 |
| 清理方式 |
PHP 定时垃圾回收(可能积累垃圾) |
Redis 过期键自动淘汰,管理便捷 |
| 依赖 |
操作系统磁盘即可 |
需安装并维护 Redis 服务 |
| 数据安全 |
锁目录风险、权限设置 |
Redis 自身权限机制,加强网络安全防护 |
优势
-
Redis Session
- 支持多台服务器/负载均衡(真正的“无状态”Web服务)
- 内存存储,读写效率高,明显优于磁盘文件
- 内置过期策略,自动清除过期会话,不留垃圾
- 数据可持久化,丢失数据风险可控
- 适合高并发、大流量业务
-
PHP 原生 Session
劣势
-
Redis Session
- 需要额外部署并维护 Redis 服务
- Redis 故障时所有会话功能将受影响,需要高可用架构
- session 数据体积受限于内存,不适宜存超大对象
-
PHP 原生 Session
- 难以扩展分布式和高并发
- 文件垃圾清理、目录权限等问题需人工运维
- 读写速度易受磁盘性能及锁影响
三、适用场景建议
- 单一服务器/站点访问量小:文件 session 足矣。
- 分布式集群/需要多端共享登录:强烈推荐 Redis Session。
- 高并发大型站点/性能敏感业务:Redis Session 不可替代,建议配置主从+Sentinel+持久化做高可用。
四、参考资料