从原理到日常维护,Redis 不是黑盒——它是一条链路。理解链路比记报错信息更有用。
高频读写 + 低延迟 +
数据可丢可重建
user:1001 → {"name":"张三","age":28} — 单字段更新只能整条覆盖,且 key 冗余。
正确做法:用 Hash 存 user:1001 → {name:张三, age:28},单字段原子读写,内存更省。
定时全量写入 dump.rdb
每条写命令追加到日志文件
RDB 快照 + AOF 增量结合
生产环境:RDB + AOF 同时开启 — RDB 做冷备,AOF 保数据不丢。
纯缓存场景(如页面片段缓存):可以关闭持久化 — 数据丢了从 DB 重新加载。
C语言编写,编译进 PHP
纯 PHP,Composer 安装
网站正常 ≠ CLI 也正常。FPM 读 php.ini,CLI 读 php-cli.ini。
部署脚本里如果用 php artisan,需要确认 CLI 那边扩展有没有加载。
# 1. Redis 服务是否在运行
systemctl is-active redis
# 2. PHP CLI 是否加载了 phpredis 扩展
/usr/local/php/8.3/bin/php -r 'var_dump(class_exists("Redis"));'
# 输出 bool(false) = 扩展未加载
# 3. 确认 PHP 入口配置文件路径
/usr/local/php/8.3/bin/php --ini
| 报错信息 | 真实根因 | 解决方向 |
|---|---|---|
Class "Redis" not found |
phpredis 扩展未加载 | 检查 php.ini 中的 extension=redis.so |
Connection refused |
Redis 服务未启动或端口不对 | systemctl start redis / 检查端口 |
| 网站正常,artisan 报错 | FPM 和 CLI 配置文件不同 | CLI 单独加载 redis 扩展 |
php -r 'var_dump(class_exists("Redis"));' 确认扩展已加载Redis 本身只是一个内存数据结构服务。PHP 通过扩展或客户端去连接它,框架再把这层连接包装成缓存、队列、会话和计数器能力。